我有一个循环,在数字间隔中查找素数。 我想要做的是将素数放在一个动态数组中,因此它的起始长度为1,当我找到第二个数字时,我想重新分配内存,使数组能够容纳2个数而不是1个,依此类推。我的代码看起来像这样:
int *arr = new int[1];
int count = 0;
for(int i = 0; i <= x; i++) // (x is a value given by the user)
{
if (is_prime(i))
{
realloc(arr,(sizeof(int)*(count + 1)));
count++;
arr[count] = i;
}
}
我确定我应该使用realloc函数来执行此操作,但上面的代码不起作用,我不习惯编程时的内存管理。
注意:我知道向量,我想用动态数组做这个。
答案 0 :(得分:3)
首先,你的数组索引是错误的,所以你要在数组之外写
改变这个:
count++;
arr[count] = i;
到此
arr[count++] = i;
其次,我认为同样重要的是,你要混合new
和realloc
。别!使用malloc/realloc/free
或new/delete
。由于realloc的有效方式,您可以将new
替换为int *arr = NULL;
第三,正如Paranaix所说,你没有将realloc
的结果分配回arr
。
答案 1 :(得分:2)
realloc
不会修改传递给它的指针,但会返回新指针:
arr = (int*) realloc(arr,(sizeof(int)*(count + 1)));
请注意,您还应检查是否发生错误:
if(arr == NULL)
break; // or try something else