使用realloc存储向量中的一些值

时间:2019-06-30 17:16:40

标签: c

我不明白发生了什么。 我已经编写了此测试代码,以测试另一个代码上需要的过程。我基本上只想获取指向数组中不同于零的值的指针。

#include <stdio.h>
#include <stdlib.h>

int main ()
{
    int b[10]={0, 1, 2, 0, 4, 0, 0, 7, 8, 9};
    int *p;
    int i;
    int count=0;

    p=malloc(0) ;

    for (i=0;i<10;i++)
        if (*(b+i)!=0)
        {
            count++;

            realloc(p,count * sizeof(int));

            *(p + count -1) = *(b + i);

            printf("*(p + %d) = %d\n",count-1,*(p + count -1));
        }

    for (i=0;i<count;i++)
        printf("*(p+%d) = %d\n",i,*(p+i));

    return 0;

}

发生的是,在第一个“ for”循环内的打印中,它们按照我的预期进行打印,所以1 2 4 7 8 9,但是当我第二次打印这些值时,它们有时是正确的,有时前两个数字是完全随机的。 这是由于不正确使用realloc造成的吗?

1 个答案:

答案 0 :(得分:0)

您的代码应类似于:

int *new_p = realloc(p, count * sizeof(int));
if (new_p != NULL)
    p = new_p;
else {
  free(p);
  return ENOMEM; //or any error
}

这样您就可以使用realloc的返回值并检查realloc正常且没有泄漏。