这种realloc的使用是否正确?

时间:2014-01-19 09:46:18

标签: c realloc alloc

原始问题

我可以使用realloc()函数,如下面的代码:

int *ptr, i, num=5;

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

2 个答案:

答案 0 :(得分: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 :(得分:-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;
        }
}