gpt4 book ai didi

c - 将 realloc 与 for 循环一起使用

转载 作者:行者123 更新时间:2023-11-30 20:28:32 26 4
gpt4 key购买 nike

我正在使用 realloc 在运行时在动态数组中分配内存。首先,我使用 calloc 分配了一 block 内存,大小为随机整数 a。在我的程序中,我取了a=2。之后我想存储生成的 14 个随机值,因此我必须使用 realloc 调整内存大小。我在 for 循环中做同样的事情。对于 1 次迭代,realloc 可以工作,但之后大小不会增加,并且会发生错误“堆损坏”。我无法理解这个问题。如果可以的话,请帮助我了解问题发生的位置以及如何解决它。多谢。下面是我的代码:

j=j*a; //a=3
numbers = (int*) calloc(b, j); //b=14, no of elements I want to store

printf("Address:%p\n",numbers);
if (numbers == NULL)
{
printf("No Memory Allocated\n");
}
else
{
printf("Initial array size: %d elements\n", a);
printf("Adding %d elements\n", b);
}



srand( (unsigned) time( NULL ) );
for(count = 1; count <= b ; count++)
{


if(i <= j)
{

numbers[count] = rand() % 100 + 1;
printf( "Adding Value:%3d Address%p\n", numbers[count],numbers[count] );

i++;

}

if (i > j)
{
printf("Increasing array size from %d bytes to %d bytes\n",j,j*a);
j=j*a;
numbers = (int*) realloc(numbers,j);
printf("Address:%p\n",numbers);
if(numbers == NULL)
{
printf("No Memory allocated\n");
}


}

}

free(numbers);

return 0;
}

最佳答案

  • 初始数组长度(长度和大小不同)为b ,不是a .
  • 添加b元素?我不认为你是。
  • C 中的数组是从零开始的。循环应该是 for(count=0; count<b ; count++) .
  • count对于循环变量来说这是一个糟糕的名字。 count应该保存元素的数量,而不是循环变量。
  • 很难想象 j可能。因为您在调用 calloc 时使用它作为元素大小它至少应该是 4 的倍数,即 int 的大小。这是什么?!
  • realloc似乎与 calloc 没有任何关系.

我确信还有很多其他问题。如果您需要更多帮助,则需要明确说明您的目标。

编辑

听起来你想要这样的东西:

int capacity = 10;
int count = 40;
int i;

int* array = (int*)malloc(capacity*sizeof(int));
for (i=0; i<count; i++)
{
if (i==capacity)
{
capacity *= 2;
array = (int*)realloc(array, capacity*sizeof(int));
}
array[i] = RandomIntInRange(1, 100);
}
free(array);

注释:

  1. 没有错误检查。在生产代码中,您将检查分配是否成功,如果失败,以这种方式完成的重新分配将会泄漏。但是,当您仍处于这种理解水平时,没有必要将消息与错误检查混淆。
  2. 无需阅读输入 - 您可以这样做。
  3. 没有写入输出 - 您可以这样做。

关于c - 将 realloc 与 for 循环一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288133/

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