0

これはベクトルのポインターを使用する最初の試みであるため、いくつかの調査を行い、プログラムで試してみましたが、それに近いとはいえ、望んでいた結果が得られません。お粗末な質問。

4

2 に答える 2

3

エラーは、ベクターにデータを追加するときではなく、ベクターの内容を印刷するときです。

for (int i= 0; i<5; i++) {
    if(storeData.empty()) {
        cout <<"<no other records available>" << endl;
    }
    // error: storeData[i] may not be valid
    else if(storeData[i].getCivIndex() == 0 && storeData[i].getXOrdinate() == 0 && storeData[i].getYOrdinate() == 0) {
        cout << "<no other records available>" << endl;
    }
    else { 

        cout << "Civ Index:"<< storeData[i].getCivIndex() << ",at Sector("<< storeData[i].getXOrdinate() << "," << storeData[i].getYOrdinate() <<")" << endl;

    }
}

ベクトルに含まれるレコードが少なくても、ここでは常に 5 つのレコードを読み取ろうとしています。逆参照する前にベクトルのサイズを確認する必要があります。そうしないと、ランダムなメモリを読み取っていて、未定義の動作が発生します。

    if(storeData.size() <= i) {
        cout <<"<no other records available>" << endl;
    }
于 2013-10-13T04:29:53.127 に答える