[英]Declaring vectors inside for loop
我有一個指向vector<int> *F[12];
的指針數組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
超出范圍。 此時,任何現有的引用或指針都是無效的。 你需要在適當的范圍內聲明對象(在這種情況下我不知道那是什么,但肯定在for
循環之外)。
每次迭代都會在調用堆棧上創建newvec。 每次通過循環,你創建它,指向它,然后它消失。 您希望使用'new'運算符在堆中創建一個更持久的向量實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.