gpt4 book ai didi

c - 使用 realloc 仅存储 vector 中的一些值

转载 作者:行者123 更新时间:2023-11-30 16:16:04 24 4
gpt4 key购买 nike

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

#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 使用不当造成的吗?

最佳答案

你的代码应该是这样的:

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 是否正常,没有泄漏。

关于c - 使用 realloc 仅存储 vector 中的一些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56826673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com