我正在使用realloc在运行时在动态数组中分配内存。首先,我分配了一个带有calloc的内存,其大小为随机整数a。在我的程序中,我采取了= 2。之后我想存储大约14个随机值,所以我必须使用realloc调整内存大小。我在for循环中做同样的事情。 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;
}
答案 0 :(得分:1)
b
,而不是a
。b
元素?我认为你不是。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 :(得分:0)
整数“j”未在代码中初始化,导致a = 0 * 3,这意味着a将为零,并且不会分配任何内存。 segfault是由于您没有处理数字为NULL。更改为并将j设置为有意义的内容
#include <stdlib.h>
#include <stdio.h>
void
main (int argc, char *argv[])
{
int a = 3;
int j = 1 * a; //a=3
int b = 14;
int *numbers = calloc (b, j); //b=14, no of elements I want to store
int count = 0, i = 0;
printf ("Address:%p\n", numbers);
if (numbers == NULL)
{
printf ("No Memory Allocated\n");
return;
}
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);
}