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

C++ Access violation writing location 0xCCCCCCCC

本文关键字:位置 0xCCCCCCCC 访问冲突 c++      更新时间:2023-10-16
string guessingWord[89];
fstream wordList;

wordList.open("wordlist.txt");
for (int i = 0; i < 90; ++i){
    wordList >> guessingWord[i];
}
    wordList.close();

这段代码有什么问题,当我试图测试这段代码时,访问违反写入位置显示

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

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

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

数组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];
}