C动态内存分配
数组是固定数量的值的集合,在声明数组的大小之后,无法更改。有时,数组大小可能不够,就需要动态扩容。解决此问题,可以在运行时手动分配内存。这在C编程中称为动态内存分配。
动态分配存储器涉及到的库函数有
malloc()
calloc()
realloc()
free()
这些函数在<stdlib.h>
头文件中定义。
1.malloc()
名称“ malloc”代表内存分配,memory allocation。
该malloc()
函数保留指定字节数的内存块。并且,它返回一个指针的void
可铸造成任何形式的指针。
malloc()的语法
例
上面的语句分配了400个字节的内存。这是因为float
的大小为4个字节。并且,指针ptr保存分配的存储器中的第一个字节的内存地址。
如果无法分配内存,则表达式将产生一个NULL
指针。
2.calloc()
名称“ calloc”代表连续分配,contiguous allocation。
malloc()
函数分配内存,但不初始化内存。而calloc()
函数分配内存并将所有位初始化为零。
calloc()的语法
例:
上面的语句为float
类型的25个元素在内存中分配了连续的空间。
3.free()
使用calloc()
或malloc()
不单独释放创建的动态分配内存,必须明确使用free()
释放空间。
free()的语法
该语句释放由指向的内存中分配的空间ptr
。
示例1: malloc()和free()
在这里,我们已为n个数字动态分配了内存
示例2: calloc()和free()
4.realloc()
如果动态分配的内存不足或超出要求,则可以使用该realloc()
功能更改以前分配的内存的大小。
realloc()的语法
在这里,ptr以新的大小x重新分配。
示例3: realloc()
运行该程序时,输出为:
总结
malloc动态分配内存,不初始化
如果无法分配内存,则返回NULL
calloc动态分配内存,初始化所有bit为0
如果无法分配内存,则返回NULL
free释放内存
realloc重新分配内存