0

関数への参照によってマップを渡したい。コードは次のとおりです。

void test(map<int, double *> &a);

int main(){
    map<int, double *> a;
    test(a);
    cout << a[1][1] << endl;
    return 0;
}

void test(map<int, double*> &a)
{
    double red[] = {1.1, 2, 3};
    a[1] = red;
}

問題は、a[1][1] が 2 であるはずだということです。ただし、プログラムを実行すると、1.73e120 のような大きな数値が返されます !!!

4

4 に答える 4

4

の定義によって作成された配列redは、関数に対してローカルtestです。関数が終了すると破棄されます。の最初の要素へのポインターを配置するだけですがmap、関数が戻ると、そのポインターは有効な配列を指しなくなります。配列がなくなり、ポインターがぶら下がったままになっています。

配列を動的に割り当てることもできますが、これは非常に面倒であり、メモリ リークやその他のバグが発生する可能性があります。

代わりに、次のような標準のコンテナー タイプを使用することをお勧めしstd::vectorます。

void test(map<int, std::vector<double>> &a)
{
    a[1] = std::vector<double>{1.1, 2.0, 3.0};
}
于 2013-04-18T13:41:09.207 に答える