【发布时间】:2017-12-01 00:56:52
【问题描述】:
这是我被教导使用realloc()的方式:
int *a = malloc(10);
a = realloc(a, 100); // Why do we do "a = .... ?"
if(a == NULL)
//Deal with problem.....
这不是多余的吗?我不能做这样的事情吗? :
if(realloc(a, 100) == NULL) //Deal with the problem
对于我发现的其他 realloc 示例也是如此,例如:
int *oldPtr = malloc(10);
int * newPtr = realloc(oldPtr, 100);
if(newPtr == NULL) //deal with problems
else oldPtr = newPtr;
我不能这样做吗? :
int *oldPtr = malloc(10);
if(realloc(oldPtr, 100) == NULL) //deal with problems
//else not necessary, oldPtr has already been reallocated and has now 100 elements
【问题讨论】:
-
这不是多余的。
realloc可能会返回一个不同的指针并使旧指针无效。阅读man realloc。 -
@Ryan:OTOH,教授 OP 的方式也不好,因为如果
realloc()失败,它会泄漏原始分配。 -
Realloc 返回一个指针。你必须在某个地方收集它。
-
角落考虑:如果新大小为 0,则需要特殊考虑,因为来自
realloc(...., 0)的返回值不一定是内存不足。realloc(...., more_than_zero)在内存不足时返回NULL,也可能/可能不会在realloc(...., 0)上返回非内存不足NULL。 -
这不是多余的。不能保证 realloc() 会返回相同的地址。