我有一个指向矢量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
并从中创建一个向量?
答案 0 :(得分:2)
newvec
超出范围。此时,任何现有的引用或指针都是无效的。你需要在适当的范围内声明对象(在这种情况下我不知道那是什么,但肯定在for
循环之外)。
答案 1 :(得分:2)
每次迭代都会在调用堆栈上创建newvec。每次通过循环,你创建它,指向它,然后它消失。您希望使用'new'运算符在堆中创建一个更持久的向量实例。