动态内存分配函数代码

2024-08-23 19:59:55

╯▽╰关于C语言动态分配内存的问题要进行动态内存分配,除了使用包含指元素的结构体之外,还需要使用C语言提供的一些标准库函数。 (使用时需包含文件“alloc.h”或“malloc.h”或“stdlib.h”)
1.malloc函数
函数原型为void*malloc(unsignedintsize);内存中在动态存储区域中分配“大小”字节的恒定度区域。 该函数的返回值是该范围的首地址。 “类型说明符”指示该区域用于什么类型的数据。 (类型说明符*)表示将返回值转换为该类型的指。 “大小”是一个无符号数。 例如:pc=(char*)malloc(100);意思是分配100字节的内存空间,并强将其转为字符数组类型。 该函数的返回值是一个指向字符数组的指。 电脑标变量。 如果大小超过可用空间,则返回空指值。
2.calloc函数
函数原型为void*calloc(unsignedintnum,unsignedintsize)
根据给定的数据个数和每个数据占用的字节数创建存储空间。 其中num为数据量,size为每个数据占用的字节数,所以开的总字节数为num*size。 该函数返回存储区的起始地址。 calloc函数和malloc函数唯一的区别是可以同时分配n块区域。 例如:ps=(structstu*)calloc(2,sizeof(structstu));其中sizeof(structstu)是求stu的结构度。 那么,这条语句的含义就是:根据stu的度分配2个连续的区域,强转换为stu类型,并将其首地址赋给指变量ps。
3realloc函数:
函数原型为void*realloc(void*ptr,unsignedintsize)
重新定义开辟的内存空间的大小。 ptr指向的内存空间已经该函数开,大小为新的空间大小,其值可以大于或小于原来的值。 该函数返回新内存区域的起始地址(该地址可能与之前的地址不同)。 例如:p1=(float*)realloc(p1,16);将原来分配的8字节调整为16字节。
​**动态申请的内存空间必须使用free()函数手动释放
​例如:
​char*p;
​p=(char*)malloc(8);//开辟8字节存储空间,为指p分配地址,通过指p访问空间。
*p='L';//存储字符,分配存储空间的第0个字节L
*(p+1)='o';//分配空间的第一个字节存储字符'o'.
★(p+2)='v';
★(p+3)='e';

★(p+4)='\0';

set(p);//输出字符串
free(p);//空闲空间
注:*(p+n)等价于p[n],(p+n)是地址,*(p+n)是地址(p+n)的。
例如:上面程序中的*(p+1)='A';可以写为p[1]='A';

malloc()函数的参数可以是常量、变量或表达式等。 除了存储字符串之外,malloc()还可以占用空间来存储整数等数据。 例如,分配存储整数的空间如下:
int*ptr;
ptr=(int*)malloc(sizeof(int)*4);
malloc()开空间存储4个整数数据。 由于malloc()总是返回第0个字节的地址,且返回值必须是char*类型,因此强通过(int*)指向整数类型,然后存储在指向整数类型ptr的指中。 br/>使用malloc()函数分配空间时,如果计算机无法提供足够的分配空间,则会返回NULL指。 因此,如果返回的指为NULL,则意味着没有足够的空间可供分配。 (#`′)凸什么是c语言里面的动态存储分配函数啊?动态内存分配是指分配的内存大小在运行时确定,一般分配在堆上。

C语言中与动态内存分配相关的函数有:malloc、calloc、realloc、free;

使用malloc函数相对简单。 成功的m​​alloc调用返回一个指向已分配内存大小的指。 如果发生错误,则返回NULL,并将错误代码设置为ENOMEM。
calloc函数可以分配n大小的内存空间,一般用于分配struct。
realloc函数将ptr指示的内存空间重新分配到大小,并返回新的首内存地址。
free函数释放前三个函数所需的内存空间。 因此,必须释放通过前三个分配函数分配的内存。