-1

是否可以从 C 中指向 NULL 的指针重新分配内存?

int *v = 0;
for(i = 0; i < 10; i++)
  v = (int *) realloc(v, (i+1)*sizeof(int));
4

6 回答 6

2

“如果 ptr 为 NULL,该函数的行为与 malloc 完全相同,分配一个新的 size 字节块并返回一个指向它开头的指针。”

http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/

顺便说一句,我知道这段代码只是为了解决这个问题,但你应该在更新指针之前检查 realloc 的返回值:

int *p,*tmp;

tmp = (int *)realloc(p, nBytes);
if(tmp){
  p = tmp;
}
else{
  //Out of memory!
}

否则,当 realloc 失败时,您将失去对分配内存的引用。

于 2011-03-29T06:08:14.800 回答
2

如果 ptr 为 NULL,则对于所有 size 值,调用等效于 malloc(size)。

来源: man 3 realloc

于 2011-03-29T06:08:15.560 回答
2

从标准

7.20.3.4/3 ... 如果 ptr 是空指针,则 realloc 函数的行为类似于指定大小的 malloc 函数。

于 2011-03-29T08:15:23.553 回答
1

手册页

如果 ptr 为 NULL,则调用等效于 malloc(size); 如果 size 等于 0,则调用等效于 free(ptr)。除非 ptr 为 NULL,否则它一定是由先前对 malloc()、calloc() 或 realloc() 的调用返回的。

但是,您不应该忘记,如果它不能调整内存大小,它realloc()可以返回NULL。如果发生这种情况,您发布的代码可能会导致分配多个内存块,因为 NULL 返回值将被反馈到realloc()该内存块中,然后分配一个新块。(希望您并没有真正使用该代码......)

于 2011-03-29T06:12:55.067 回答
0

是的。

这里

如果 ptr 是空指针,则 realloc() 的行为与指定大小的 malloc() 类似。

于 2011-03-29T06:10:16.420 回答
0

从 realloc手册页

realloc() 将 ptr 指向的内存块的大小更改为 size 字节。内容将不变为新旧尺寸中的最小值;新分配的内存将未初始化。如果 ptr 为 NULL,则调用等效于 malloc(size); 如果 size 等于 0,则调用等效于 free(ptr)。除非 ptr 为 NULL,否则它一定是由先前对 malloc()、calloc() 或 realloc() 的调用返回的。如果指向的区域被移动,则执行 free(ptr)。

于 2011-03-29T06:10:50.413 回答