簡體   English   中英

在for循環中聲明向量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM