正在为循环内部声明向量

Declaring vectors inside for loop

本文关键字:声明 向量 内部 循环      更新时间:2023-10-16

我有一个指向向量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并从中创建向量吗?

每次迭代都会在调用堆栈上创建

newvec。每次在循环中创建它时,都会指向它一个指针,然后它就会消失。您希望使用"new"运算符在堆中创建一个持续时间更长的向量实例。

循环退出时,

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