1

我有一个指向向量的指针数组,vector<int> *F[12];我希望初始化一些向量并将它们的地址存储在 F 中。

for(uint i = A; i <= B; ++i){
    vector<uint> newvec(pow2(i), 0);
    F[i] = &newvec;
}

但是当我稍后尝试访问它们时,我发现它们并非全为零:

for(uint i = A; i <= B; ++i){
    for(uint j = 0; j <= pow2(i); ++j){
        if((*F[i]).at(j) != 0){
            cout << i << "/" << j << "/" << (*F[i]).at(j) << "|";
        }
    }
}

我认为这与声明的向量的范围有关。为什么内存被释放了?我必须使用malloc并从中创建一个向量吗?

4

2 回答 2

2

newvec循环退出时超出范围。此时任何现有的引用或指向它的指针都是无效的。您需要在适当的范围内声明该对象(在这种情况下,我不知道这对您来说是什么,但肯定在for循环之外)。

于 2012-10-07T03:12:46.700 回答
2

每次迭代都会在调用堆栈上创建 newvec。每次通过你创建它的循环,创建一个指向它的指针,然后它就消失了。您想使用“新”运算符在堆中创建一个更持久的向量实例。

于 2012-10-07T03:14:52.317 回答