- malloc(): 申请的内存是存放在堆上;malloc函数向系统申请size字节的内存空间
原型: void *malloc(size_t size) - free(): free函数释放p参数指向的内存空间。该内存空间必须是由malloc,calloc或realloc函数申请的。
原型: void free(void *p);
注意:该函数不会改变p参数的值,所以调用后它依然指向原来的地方(变为非法空间) - calloc(): 函数在内存中动态地申请nmemb个长度为size的连续内存空间(即申请的总空间尺寸为nmemb * size),这些内存空间全部被初始化为0
原型: void *calloc(size_t nmemb, size_t size); - realloc(): realloc函数修改ptr指向的内存空间大小为size字节如果新分配的内存空间比原来的大,则旧内存块的数据不会发生改变;如果新的内存空间大小小于旧的内存空间,可能会导致数据丢失,慎用!该函数将移动内存空间的数据并返回新的指针
原型: void *realloc(void *ptr, size_t size); - 问题: 如果申请的内存空间没有释放那会发生什么?
答:内存泄漏 - 导致内存泄漏还有一种方式:丢失内存块
eg:
int a = 10;
int *p =(int *)malloc(sizeof(int)*100);
p = &a;
- 初始化内存空间:
memset(p,0,Nsizeof(int)); //指针p指向长度为Nsizeof(int)字节赋值
memcpy(p2,p1,10);