C语言malloc函数详解
malloc就是memory allocate动态分配内存。
编程时,预先知道数组的大小,那么定义数组时就比较容易。例如,一个存储人名的数组,它最多容纳 100 个字符,所以可以定义数组:char name[100];
但是,如果预先不知道需要存储的文本长度,可以使用动态内存分配,malloc的出现时弥补静态内存分配的缺点。
1.静态内存分配的不足
1、定义数组,如int list[3]时,需要事先指定数组的长度,其长度必须是一个常量(宏定义的 常量)。2、传统数组(静态分配),不能手动释放,只能等待系统释放,静态分配的变量在该函数内运行的时候有效,当静态分配的变量所在函数运行完之后,该内存会自动释放。静态分配的内存,是在栈中分配的,其实在C语言中的函数调用也是通过栈来实现的,栈这种数据结构的一个特点是先进后出,所以,在调用函数的时候,都是先压入栈中,然后,再从最上面的函数开始执行,最后,执行到main函数结束。(动态分配通过malloc分配,是在堆中分配的,堆不是一种数据结构,它是一种排序方式,堆排序)。3、传统数组的长度一旦定义之后,就不能更改,比如说,如果我有一个业务在这之前给分配的大小为100,但是,我现在由于业务数量的增长,原来的大小就无法满足。4、静态分配不能跨函数调用,就是无法在另一个函数中,来管理一个函数中的内存。静态分配,只在当前函数有效,当,静态分配所在的函数运行完之后,该变量就不能被其他的函数所调用。
2.malloc动态内存分配
malloc其实就是一个可以动态分配内存的函数,返回 void * 为分配的内存首地址。分配失败返回空指针。
malloc函数1.使用时包含头文件 #include <malloc.h> 2.使用方法:int *p = (int *)malloc(sizeof(int)) ;3.malloc开辟空间所返回的首地址是动态分配的。4.在不需要内存时,都应该调用函数free()来释放内存。
2.1常用使用方法