【发布时间】:2015-10-31 14:39:12
【问题描述】:
当我们尝试使用realloc 调整malloc 分配的内存大小时,我们通常会这样做:
char *ptr = (char *)malloc(size_1);
ptr = (char *)realloc(ptr, size_2);
如果size_2 可能大于或小于size_1。如果新大小更大,则旧数据不会丢失,并且新分配的字节未初始化。如果旧地址没有足够的内存来连续存储所有字节,ptr 包含的起始地址可能会更改。 realloc 将旧块的内容移动到新块中,ptr 将指向这个新块的初始字节。
但是,如果使用calloc 分配内存,我无法理解realloc 函数的作用。有人可以简要介绍一下realloc 如何处理calloc 分配的内存吗?
【问题讨论】:
-
可能对 OP 没有功能差异的细微差异:1) 如果分配了更多内存,则不知道将额外的内存初始化为 0 - 初始值未定义。最初分配给
calloc()的内存在第一次访问之前被清零,尽管不一定在calloc()时间。 2)calloc()可以分配比malloc()/realloc()更多的内存,因为calloc()调用仅限于理论上的SIZE_MAX*SIZE_MAX。这发生在早期的平台上 - 现在看不到。 -
为什么会有这么多以“我们知道
”开头的帖子 -
@MattMcNab 确实,但 OTOH 让我们庆幸的是,潜在的谬误或错误前提在开始时经常出现:-|
-
@DivyaBolla 当您编辑了第一句话时,您现在已经完全删除了引发问题的唯一内容。如果您现在了解内存布局没有什么不同,那么问题的意义何在?
标签: c malloc dynamic-memory-allocation realloc calloc