堆内存的分配与释放
malloc函数
c
#include <stdlib.h>
void* malloc(size_t size);
- 返回一个void类型的指针是因为不清楚指针变量的类型,后续需要进行强制转换
功能:malloc
函数向系统申请size个字节的内存空间,并返回一个指针,这个指针指向被分配的内存空间的首地址,并且申请的内存空间是在堆
上的。堆上的空间需要手动申请,手动释放,否则会造成内存泄漏
例子
c
int *p;
p = (int *) malloc(10*sizeof(int));
free函数
c
#include <stdlib.h>
void free(void *ptr);
功能:释放ptr
所指向的内存空间
注意:
free函数并不会修改指针变量的值!但是free执行完成以后指针所指向的原来的那块地址空间中的内存是不确定的,所以当free操作后需要将指针置为NULL
realloc函数
如果之前分配的空间不够了怎么办?
c
#include <stdlib.h>
void *realloc(void *ptr,size_t size);
功能:在堆中分配一块size大小的新的内存空间,空间大小单位为字节,并且还会将ptr
所指向的空间中的内容拷贝到新的内存空间中,最后返回新的内存空间的首地址
注意:使用realloc
函数,原先的那块内存空间会自动free
,无需手动再次操作