C和指针详解------动态内存分配

malloc和free

malloc和free分别用于执行动态内存分配和释放。这些函数维护一个可用内存池。当一个程序另外需要一些内存时,它就调用malloc函数,malloc从内存池中提取一块合适的内存,并向该程序返回一个指向这块内存的指针。当一块以前的内存不再使用时,程序调用free函数把它归还给内存池供以后之需。
两个函数原型声明如下

void *malloc(size_t size);
void free(void *pointer);

malloc所分配的是一块连续的内存。

如果操作系统无法向malloc提供更多的内存,malloc就返回一个NULL指针。

向free传递一个NULL参数不会产生任何效果

malloc是如何知道你所请求的内存需要存储的是整数、浮点数、结构还是数组呢?它并不知道。所以malloc返回一个类型为void *的指针,供你强制转换。

calloc 和 realloc

void *calloc(size_t num_elemnets, size_t element_size);
void realloc(void *ptr, size_t new_size);

calloc也用于分配内存。malloc和calloc之间的主要区别是后者在返回指向内存的指针之前把它初始化为0。

realloc函数用于修改一个原先已经分配的内存块的大小。使用这个函数,你可以使一块内存扩大或缩小。

常见的动态内存错误

在使用动态内存分配的程序中,尝尝会出现许多错误。这些错误包括对NULL指针进行解引用操作、对分配的内存进行操作时越过边界、释放并非动态分配的内存、试图释放一块动态分配的内存的一部分以及一块动态内存被释放之后被继续使用。

你可能感兴趣的:(C和指针详解------动态内存分配)