网上科普有关“calloc和malloc和realloc的区别”话题很是火热,小编也是针对calloc和malloc和realloc的区别寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
realloc,malloc,calloc的区别
三个函数的申明分别是:?
void*?realloc(void*?ptr,?unsigned?newsize);?
void*?malloc(unsigned?size);?
void*?calloc(size_t?numElements,?size_t?sizeOfElement);?
都在stdlib.h函数库内
它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL?
malloc用于申请一段新的地址,参数size为需要内存空间的长度,如:?
char*?p;?
p=(char*)malloc(20);
calloc与malloc相似,参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,如:?
char*?p;?
p=(char*)calloc(20,sizeof(char));?
这个例子与上一个效果相同
realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度?
如:?
char*?p;?
p=(char*)malloc(sizeof(char)*20);?
p=(char*)realloc(p,sizeof(char)*40);
注意,这里的空间长度都是以字节为单位。?
C语言的标准内存分配函数:malloc,calloc,realloc,free等。?
malloc与calloc的区别为1块与n块的区别:?
malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为“size”字节的连续区域,返回该区域的首地址。?
calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为“size”字节的连续区域,返回首地址。?
realloc调用形式为(类型*)realloc(*ptr,size):将ptr内存大小增大到size。?
free的调用形式为free(void*ptr):释放ptr所指向的一块内存空间。?
C++中为new/delete函数。
c语言realloc分配
C++ 用法一样。
动态数组,第一次分配 必须用 malloc ! 以后的重新分配/再分配 就用 realloc,可以多次,根据需要增加单元。
int *a;
a = (int *) malloc(sizeof(int) * ARR_SIZE); // 第一次分配
。。。
if (i >= ARR_SIZE-1) {
ARR_SIZE=ARR_SIZE+100; // 增加100个
realloc(a,sizeof(int) * ARR_SIZE); // 再分配,老单元里的数值不会被破坏
}
原型:extern void *realloc(void *ptr, size_t newsize);
用法:#include <stdlib.h>
功能:改变ptr所指内存区域的大小为newsize长度。
说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
示例:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
char *p;
p = (char *)malloc(100);
if(p)
printf("Memory Allocated at:%p\n", p);
else
printf("Not Enough Memory!\n");
p = (char *)realloc(p, 256);
if(p)
printf("Memory Reallocated at:%p\n", p);
else
printf("Not Enough Memory!\n");
free(p);
return 0;
}
延伸:通常,realloc的用法会如下:
p = realloc(p, new_size);
if (p == NULL) {
return;
}
如果realloc()失败,ptr指向的这块内存不会变化,不会free或者移动。也就是说,如果realloc()失败了,照着上面代码的写法,这块内存就被永远遗忘。
tmp = realloc(p, new_size);
if (tmp == NULL) {
free(p);
return;
}
p = tmp;
关于“calloc和malloc和realloc的区别”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!
本文来自作者[尉泽来]投稿,不代表小熊号立场,如若转载,请注明出处:https://xx-scm.com/cshi/202607-178645.html
评论列表(4条)
我是小熊号的签约作者“尉泽来”!
希望本篇文章《calloc和malloc和realloc的区别》能对你有所帮助!
本站[小熊号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育
本文概览:网上科普有关“calloc和malloc和realloc的区别”话题很是火热,小编也是针对calloc和malloc和realloc的区别寻找了一些与之相关的一些信息进行分析,...