当声明一个数组时,它所需要的内存将在编译时就被分配。但是,数组的长度在运行时才知道。它所需要的空间取决于输入的数据。所以,存在某一个数组实际所占的内存超过编译器所分配的内存。这时候,程序就会出现问题。所以,我们可以使用动态内存分配。所谓动态内存分配即为在运行时为它分配内存。

动态内存分配函数有: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

动态内存分配(c语言)_动态内存

(2)calloc和free

动态内存分配(c语言)_动态内存_02

(3)realloc和free

动态内存分配(c语言)_分配_03

动态内存分配(c语言)_分配_04