我在这行代码中挑出了一个运行时错误:
for (synsAuxCopyIndex=1; synsAuxCopyIndex哪个在
pushSynonyms(string synline, vector
函数内部运行.我不明白为什么这个特定的行会产生错误,因为我认为我没有将任何超出范围的索引.&wordInfoVector) 调试器说:
Uncontrolled Exception 0x00411cbf in program.exe: 0xC0000005: Infracción de acceso al leer la ubicación 0x00000000.我猜"Infraccióndeacceso"将翻译为英语调试器上的未经授权的访问.
输入文件是
dictionary.txt
1 cute 2 hello 3 ugly 4 easy 5 difficult 6 tired 7 beautiful synonyms 1 7 7 1 antonyms 1 3 3 1 7 4 5 5 4 7 3
#include#include #include #include #include using namespace std; class WordInfo{ public: WordInfo() {} ~WordInfo() {} int id() const { return myId; } void readWords(istream &in) { in >> myId >> word; } vector & getSynonyms () { return mySynonyms; } vector & getAntonyms() { return myAntonyms; } string getWord() { return word; } void pushSynonyms (string synline, vector & wordInfoVector) { stringstream synstream(synline); vector synsAux; int num; while (synstream >> num) synsAux.push_back(num); int wordInfoVectorIndex; int synsAuxCopyIndex; for (wordInfoVectorIndex=0; wordInfoVectorIndex < wordInfoVector.size(); wordInfoVectorIndex++) { if (synsAux[0] == wordInfoVector[wordInfoVectorIndex].id()) { // this is the line that's generating a Runtime Error, Why? for (synsAuxCopyIndex = 1; synsAuxCopyIndex < synsAux.size(); synsAuxCopyIndex++) { // wordInfoVector[wordInfoVectorIndex].mySynonyms.push_back( // synsAux[synsAuxCopyIndex]); } } } } void pushAntonyms (string antline, vector wordInfoVector) { stringstream antstream(antline); vector antsAux; int num; while (antstream >> num) antsAux.push_back(num); // for (int i=0; i (const WordInfo &otherWordInfo) const { return word>otherWordInfo.word; } public: vector mySynonyms; vector myAntonyms; private: //vector mySynonyms; //vector myAntonyms; string word; int myId; }; //--Definition of input operator for WordInfo istream & operator >> (istream &in, WordInfo &word) { word.readWords(in); } //--Definition of output operator ostream & operator << (ostream &out, WordInfo &word) { word.printWords(out); } int main() { string wordFile; cout << "enter name of dictionary file: "; getline (cin, wordFile); ifstream inStream(wordFile.data()); if (!inStream.is_open()) { cerr << "cannot open " << wordFile << endl; exit(1); } vector wordInfoVector; WordInfo aword; while (inStream >> aword && (!(aword == "synonyms"))) wordInfoVector.push_back(aword); inStream.clear(); int i=0; while (i < wordInfoVector.size()) { cout << wordInfoVector[i] << endl; i++; } vector intVector; string synLine; while (getline(inStream, synLine) && (synLine != ("antonyms"))) aword.pushSynonyms(synLine, wordInfoVector); int theIndex; for (theIndex=0; theIndex < wordInfoVector[0].mySynonyms.size(); theIndex++) cout << "the synonyms of 1 are " << wordInfoVector[0].mySynonyms[theIndex] << endl; cout << "the size of mySynonyms of 1 is " << wordInfoVector[0].mySynonyms.size() << endl; for (theIndex=0; theIndex < wordInfoVector[0].mySynonyms.size(); theIndex++) cout << "the synonyms of 7 are " << wordInfoVector[6].mySynonyms[theIndex] << endl; cout << " the size of mySynonyms of 7 is " << wordInfoVector[6].mySynonyms.size() << endl; string antLine; while (getline(inStream, antLine)) aword.pushAntonyms(antLine, wordInfoVector); wordInfoVector[0].mySynonyms.push_back(1); system("PAUSE"); return 0; }
HUAGHAGUAH.. 6
如果你向程序添加一些调试输出,你会注意到你从未进入甚至到达"循环"的"罪魁祸首".
问题实际上是对它上面的"synsAux [0]"进行测试 - synxAux.size()为零,因此访问第0个元素是索引越界错误.
1> HUAGHAGUAH..:如果你向程序添加一些调试输出,你会注意到你从未进入甚至到达"循环"的"罪魁祸首".
问题实际上是对它上面的"synsAux [0]"进行测试 - synxAux.size()为零,因此访问第0个元素是索引越界错误.