【发布时间】:2014-08-21 20:09:20
【问题描述】:
int *ptr;
...
realloc(ptr,++count*sizeof(int));
or
ptr=realloc(ptr,++count*sizeof(int));
我注意到如果我多次使用选项一,第一个内存地址(ptr 指向)的值将变为未定义(尽管内存块中的所有其他值都可以,并且可以通过下标访问ptr)。
但是,我假设所有 realloc 所做的只是缩小或增加内存块的大小,ptr 仍将指向同一个内存块,并且其值都不会改变。那么如果我使用第一个选项,为什么内存块中的第一个地址最终会有一个意外的值,因为ptr 不是仍然指向同一个地址吗?
EDIT:我确实记得给ptr分配内存,只是觉得提不起来。
【问题讨论】:
-
如果不占用新的内存块,您不能保证会有更多的连续空间可以扩展。
-
@chris:即使有,重用传递给
realloc的指针也是UB,除非realloc失败。 -
@Deduplicator 即使它指向同一个内存位置?
-
@MattMcNabb: 没有一致的方法可以让你找到,答案是肯定的。 (我也曾经天真地认为不是……)