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 は、反復ごとにコール スタックに作成されます。ループを作成するたびに、それへのポインターを作成すると、それは消えます。「new」演算子を使用して、ヒープ内のベクトルの持続時間の長いインスタンスを作成したいとします。

于 2012-10-07T03:14:52.317 に答える