这个realloc使用是否正确?

4

原始问题

我能使用realloc()函数来实现以下代码吗:

int *ptr, i, num=5;

for (i=0; i<num; i++)
  void *nptr = realloc (ptr, (i+1) * sizeof(int) );

4
不行。一旦原始指针在realloc中被使用,只有返回值可以(希望如此)用于下一次迭代。(您的原始指针也没有初始化;另一次进入未定义行为)。它还像筛子一样泄漏内存。奇怪的是,将“ptr”初始化为NULL会消除未定义行为,但您仍然会有泄漏。 - WhozCraig
5
ptr 没有初始化。 - BLUEPIXY
2个回答

6
不,你应该在开头初始化ptr,然后再分配新值。
int *ptr = 0;

for (unsigned i=0; i<5; i++) {
  void *nptr = realloc (ptr, (i+1) * sizeof(int) );
  if (nptr) ptr = nptr;
  else abort();
}

否则,在第一次调用时,您可能会向realloc传递一些随机值。在随后的调用中分配的内存将被简单地丢失。

-1
不,你应该用NULL初始化指针ptrnptr。并在for循环之前声明nptr。 你的代码应该像这样:
#include<stdio.h>
#include<stdlib.h>
void main()
{
        int *ptr=NULL, i, num=5;
        void *nptr=NULL;
        for (i=0; i<num; i++)
        {
                nptr = realloc (ptr, (i+1) * sizeof(int) );
                if (NULL != nptr)
                    ptr = nptr;
        }
}

在循环中,每次ptr都是NULL。如果ptr是空指针,则函数的行为类似于malloc,分配一个新的大小为字节的块,并返回其开头的指针。 - BlackMamba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接