增加循环中动态分配的数组的大小

时间:2014-01-28 21:01:06

标签: c++

我有一个循环,在数字间隔中查找素数。 我想要做的是将素数放在一个动态数组中,因此它的起始长度为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函数来执行此操作,但上面的代码不起作用,我不习惯编程时的内存管理。

注意:我知道向量,我想用动态数组做这个。

2 个答案:

答案 0 :(得分:3)

首先,你的数组索引是错误的,所以你要在数组之外写

改变这个:

count++;
arr[count] = i;

到此

arr[count++] = i;

其次,我认为同样重要的是,你要混合newrealloc。别!使用malloc/realloc/freenew/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