C语言中malloc函数和calloc函数分配地址的时候区别在什么地方

来个简明版本的,初学者,长了实在看不太懂... 来个简明版本的,初学者,长了实在看不太懂 展开
 我来答
若以下回答无法解决问题,邀请你更新回答
f4606304
推荐于2016-04-22
知道答主
回答量:35
采纳率:0%
帮助的人:21.1万
展开全部
函数原型:
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t nelem, size_t elsize);
函数声明都在stdlib.h函数库内。
malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为"size"字节的连续区域,返回该区域的首地址。
calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为"size"字节的连续区域,返回首地址。
realloc 不能保证重新分配后的内存空间和原来的内存空间指在同一内存地址, 它返回的指针很可能指向一个新的地址。所以,在代码中,必须把realloc返回的值,重新赋给 p 如:
p = (char *) realloc (p, old_size + new_size);
甚至可以传一个空指针(0)给 realloc ,则此时realloc 作用完全相当于malloc。如:
int* p = (char *) realloc (0,old_size + new_size); //全新分配一个内存空间,作用完全等同于以下这行: 
int* p = (char *) malloc(old_size + new_size);

calloc(len, size)与malloc相似,参数len为申请地址的单位元素长度,size为元素个数,如:
char* p;
p=(char*)calloc(sizeof(char),1000);

另外:void *alloca(size_t size)
函数说明:alloca()用来配置size个字节的内存空间,然而和malloc/ calloc不同的时, alloca()是从堆栈空间(stack)中配置内存,因此在函数返回时会自动释放此空间
返回值 :若配置成功则返回一指针, 失败则返回NULL
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式