G ++的分段错误

时间:2014-03-26 17:34:31

标签: c++ string gdb g++

我的程序的一部分出现了分段错误。我尝试了几种不同的方法让它发挥作用,但没有一种方法成功。我用gdb调试它并获得:

  

编程接收信号SIGSEGV,分段故障。   来自/ usr / lib64 / libstdc ++的std::basic_string <char, std::char_traits <char>, std::allocator <char> >::assign(std::basic_string <char>, std::char_traits <char>,std::allocator <char> > const&) ()中的0x000000363c49d56e。so.6

我不确定调试信息是什么意思,我搜索时没有找到任何有用的信息。有人可以告诉我为什么我会收到此错误以及如何修复它?

以下是错误程序的一部分。

  std::string name, gift, input, token, compare;
  std::string giant[50], separated[20], individuals[20], items[20];
  int size, z = 0, x = 0, r =0;
  cout << "****************Opening file to read list.****************" << endl << endl;
  ifstream infile;
  infile.open("input.txt");

  while(!(infile.eof()))
  {
       for(size = 0; size < 20; size++)
       {
             getline(infile, giant[size]);
       }           
       for(z = 0; z < 20; z++) //I believe this loop is the problem.
       {
             std::istringstream identity(giant[z]); 
             while(getline(identity, token, '"'))
             {
                    separated[x] = token;
                    x++;
             }
       }
  }

提前致谢。

2 个答案:

答案 0 :(得分:1)

你很明显会超越separated

使用向量,而不是数组和/或assert作为算法期望的容器大小。然后,您将能够更快地看到逻辑错误。

答案 1 :(得分:0)

x的值不断增加。当x达到20时,你需要做点什么。