关于动态内存管理的函数
malloccallocreallocfree
关于动态内存管理的函数申请空间:malloc calloc realloc
释放空间:free
原则:谁申请谁释放,防止产生内存泄露。
void *malloc(size_t size)
功能:在内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是分配区域的起始地址。
示例:
#include#include int main() { int *p=NULL; p=malloc(sizeof(int)); if(p==NULL) { printf("malloc() error!n"); exit(1); } *p=10; printf("%dn",*p); free(p); exit(0); }
动态数组实现
#include#include int main() { int num=5,i; int *p; p=malloc(sizeof(int)*num); for(i=0;i calloc void* calloc(size_t num,size_t size);
功能:在内存的动态存储区中分配num个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
示例
从这个例子可以看出calloc分配完存储空间后将元素初始化。输出十个0.#includerealloc#include int main() { int i; int* p = calloc(10, sizeof(int)); for(i = 0;i < 10;i++) printf("%d", p[i]); printf("n"); free(p); exit(0); } void *realloc(void *ptr, size_t size);
功能
先判断当前的指针是否有足够的连续空间,如果有,扩大ptr指向的地址,并且将ptr返回,如果空间不够,先按照size指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来ptr所指内存区域(注意:原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。示例
#includefree#include int main() { int i; int *p=malloc(5*sizeof(int)); if (!p) { printf("malloc failn"); exit(-1); } printf("malloc%pn",p); for(i=0;i<5;i++) p[i]=i; p=(int*)realloc(p,10*sizeof(int)); if (!p) { printf("realloc failn"); exit(-1); } printf("realloc%pn",p); for(i=5;i<10;i++) p[i]=i; for(i=0;i<10;i++) printf("%3d",p[i]); free(p); p = NULL; return 0; } void free(void *ptr)
功能:释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。



