当声明一个数组时,它所需要的内存将在编译时就被分配。但是,数组的长度在运行时才知道。它所需要的空间取决于输入的数据。所以,存在某一个数组实际所占的内存超过编译器所分配的内存。这时候,程序就会出现问题。所以,我们可以使用动态内存分配。所谓动态内存分配即为在运行时为它分配内存。
动态内存分配函数有:malloc,calloc,realloc,free。
函数所在的头文件:#include <stdlib.h>
函数原型:
void *malloc( size_t size );//字节数
void *calloc( size_t num, size_t size );
//第一个参数为元素个数,第二个为每个元素的字节数
void *realloc( void *memblock, size_t size );
//第一个参数为已开辟的内存块的地址, 第二个为字节数
void free( void *memblock );
malloc用于动态开辟内存,这块内存并没有初始化。
calloc也用于动态开辟内存,与malloc最大的区别是在返回这块内存的地址之前将其初始化为0。
realloc用于修改原来开辟的内存的大小。如果扩大一个内存块,这个内存原来的内容块保持不变,新的内存增加到在原来的内存块后面,但并为初始化。若缩小一个内存块,原来的内存的尾部部分被拿掉。剩余部分内存上的内容保持。
注:(1)当动态开辟内存时,在使用之前应先判断是否开辟成功。(即是否为NULL)
(2)所有由动态开辟的内存都必须用free来释放空间。
(3)不可多次释放动态开辟的空间。
(4)不可解引用NULL指针。
(1)malloc和free
(2)calloc和free
(3)realloc和free
时间: 2024-10-27 12:56:12