动态内存分配

来源:互联网 发布:linux 添加系统调用 编辑:程序博客网 时间:2024/05/18 02:12

1.malloc

void *malloc(size_t size)
malloc的参数就是要分配的字节数,如果内存池中可用的内存满足这个条件,malloc就返回一个指向被分配的内存块起始位置指针。

malloc分配的是一块连续的内存,如果内存池是空的,或者它的内存无法满足要求,malloc就返回一个NULL指针。因此,对malloc返回值就行NULL检查是必要的。

2.calloc

void *calloc(size_t num_elements,size_t element_size)

calloc和malloc一样,它分配num_elements*element_size个字节的内存,和malloc不同的地方是,calloc会把这块内存初始化为0.

3.realloc

void *realloc(void *ptr,size_t new_size)

realloc用于修改一个原先已经分配的内存块大小,使用这个函数可以使一块内存块扩大或者缩小。第一个参数是指向内存块的指针,第二个参数是修改后的内存大小。
如果原先的内存块无法满足改变大小的要求,realloc将分配另一块正确大小的内存,并把原先的内容复制过去,。因此,在使用realloc之后,最好不要使用指向旧内存的指针,而是使用realloc返回的指针。

4.free

void free(void *ptr)
free的参数要么是NULL,要么是malloc、calloc或realloc返回的值。
free一个NULL不会产生任何效果。