版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Wqh_lrr/article/details/78513490
三个函数的申明分别是:
void* malloc(size_t size);
char *p=(char*)malloc(sizeof(char)*4);
memset(p,0,sizeof(char)*4);//用0初始化p所指向的内存空间
分配成功则返回指向起始地址的指针,否则返回空指针NULL。他是分配一块连续区域,不对分配空间进行初始化
一般会在malloc后调用memset进行初始化内存空间。
从堆上进行分配
void* realloc(void* ptr, unsigned newsize);
char * = (char*)realloc(p,20)
对给定的指针所指的空间进行扩大或者缩小,无论是扩张或是缩小,原有内存的中内容将保持不变.
如果新的大小大于原内存大小,则新分配部分不会被初始化;如果新的大小小于原内存大小,可能会导致数据丢失
他是从堆上进行分配
void* calloc(size_t n, size_t size);
char* p =(char*)calloc(10,sizeof(char));
在内存的动态存储区中分配n个长度为size的连续空间,初始化空间为0
在堆上分配
在进行动态申请空间时,最后都要进行free,不然会产生内存泄漏。