C ++访问冲突写入位置0xCCCCCCCC

时间:2014-03-21 00:34:25

标签: c++

string guessingWord[89];
fstream wordList;



wordList.open("wordlist.txt");

for (int i = 0; i < 90; ++i){
    wordList >> guessingWord[i];
}

    wordList.close();

此代码有什么问题,当我尝试测试此代码时,会显示Access违规写入位置。

2 个答案:

答案 0 :(得分:5)

声明一个大小为89的数组意味着有89个元素,那些有效的指标是0-88。你的循环从0到89;因此,你正在写过数组的末尾。

那就是说,你真的应该使用vector<string>

vector<string> guessingWord;
string temp;
while ( wordList >> temp )
    guessingWord.push_back( temp );

答案 1 :(得分:0)

数组guessingWord只有89个元素,其索引范围为[0,88]

string guessingWord[89];

所以这个循环无效

for (int i = 0; i < 90; ++i){
    wordList >> guessingWord[i];
}

应该有

for (int i = 0; i < 89; ++i){
    wordList >> guessingWord[i];
}

为避免此类错误,请始终使用符号名称表示幻数。定义

就足够了
size_t N = 89;

string guessingWord[N];

//...

for (int i = 0; i < N; ++i){
    wordList >> guessingWord[i];
}