当前位置:  开发笔记 > 编程语言 > 正文

C++为什么这个向量访问会产生运行时错误?

如何解决《C++为什么这个向量访问会产生运行时错误?》经验,为你挑选了1个好方法。

我在这行代码中挑出了一个运行时错误:

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个元素是索引越界错误.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有