我不明白发生了什么。 我已经编写了此测试代码,以测试另一个代码上需要的过程。我基本上只想获取指向数组中不同于零的值的指针。
#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造成的吗?
答案 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正常且没有泄漏。