目录
作用:用来开辟动态空间,malloc返回一个指向开辟好空间的地址
介绍:结构中的最后一个元素允许是未知大小的数组,就叫做“柔性数组”成员
栈区,堆区,静态区(数据段)
(上图来自比特鹏哥直播视频截图)
栈区上创建的内容一出函数就会还给操作系统,
而堆区上的内容就不会还给操作系统
一、malloc
需要引用头文件<stdlib.h>,一般与free成对使用,在堆区开辟空间
作用:用来开辟动态空间,malloc返回一个指向开辟好空间的地址
注意:malloc返回的指针可能是空指针(NULL),所以要对它进行判断
格式:malloc(size);//size表示字节的多少,malloc(size)表示开辟多大空间的动态内存
二、free
需要引用头文件<stdlib.h>,一般与malloc成对使用
作用:用来回收动态空间
格式:free(p);//p是用来接收malloc的指针变量
注意:free回收不是将p设成NULL(空指针),所以我们的自己将其设为空指针,避免非法访问,只有动态开辟的空间才能用free释放
不能只释放一部分动态开辟的空间
动态内存开辟空间不能忘记释放(不然就会发生内存泄漏)
运行结果 (malloc和free一同运用)
三、calloc
需要引用头文件<stdlib.h>,在堆区开辟空间
注意:calloc会将空间进行初始化,而malloc不会
格式:calloc(个数, 什么类型);
使用和malloc没有什么区别
四、realloc
作用:调整动态内存
需要引用头文件<stdlib.h>
注意:realloc调整大小时可能会出现NULL的现象,所以一般使用时要判断有没有等于NULL
五、柔性数组
介绍:结构中的最后一个元素允许是未知大小的数组,就叫做“柔性数组”成员
1.柔性数组成员前面至少要有一个其他成员
2.sizeof类型返回这种结构大小是不包括柔性数组的内存
3.包含柔性数组的结构用malloc()函数进行内存的动态分配时,分配的内存应大于结构的大小,以适应柔性数组的预期大小
优势:1、方便内存的释放
2、有利于访问速度