malloc

头文件: malloc.h

原型 void* malloc( size)(不标准写法)

其中size表示的是你想申请的字节数,为了准确我们一般使用sizeof函数,而返回的是一个void指针,这就导致了我们一般都要强制类型转换到对应的类型。

例: int p=(int)malloc(sizeof(int))

int p=(int)malloc(10*sizeof(int)) //数组

前面的int* 就是强制类型转换

此外,malloc一般分配完内存后还要进行检查看是否分配成功

if(p==NULL)
{
exit(1);//退出程序
}

而且malloc是不会自动初始化的,所以在分配完内存后最好先用NULL初始化一下。

realloc

字面意思,就是给一个已经分配内存的指针增加内存,原内存中的数据不变

头文件 #include 有些编译器需要#include

原型: void realloc(void mem_address, unsigned int newsize);

mem_address是原指针,newsize是新的空间,可以大可以小

可能有下列几种情况

  1. 如果原有空间后面还有足够的内存空间,那么直接在后面增加内存空间
  2. 如果原有空间不足,会重新分配空间到其他地方,同时原地址中的数据也会复制过去
  3. 如果没有可供分配的空间,返回NULL。此时,原指针仍然有效

注意,如果分配成功,无论是否分到新空间,原指针都会被释放掉

如果 mem_address为0 那么和malloc相似,也是分配一块内存空间

如果 newsize为0,相当于free

也就是说,最好不要出现 p=realloc(p,size)这种写法,防止分配失败后指针直接丢失。好的办法是先用另一个参数接受realloc的内容,如果不为null,再让p=q

int* q;
q=(int*)realloc(p,newsize);
if(q!=NULL)
{
p=q;
}

free

释放动态申请的内存空间

原型: void free(void* ptr)