继续在C ++中获取Segmentation Fault:11消息?

时间:2016-02-17 15:52:42

标签: c++

分配是通过在命令行中放置单词和起点来搜索矩阵内的单词(仅从左到右),如果单词在那里则返回true,否则返回false。不幸的是,我继续收到分段错误消息。非常感谢任何帮助,谢谢!

#include <iostream>
#include <vector>
#include <sstream>
#include <string>
using namespace std;

int main(int argc, char *argv[]){

  for(int i = 0; i < argc; i++){
    cout << argv[i] << " ";
  }
  char word;
  argv[1] = &word;
  stringstream ss;
  string sWord;
  ss << word;
  ss >> sWord;
  int startRow = atoi(argv[2]);
  int startCol = atoi(argv[3]);

  int x, y;
  cin >> x >> y;
  cout << x << y << endl;
  vector < vector < char > > matrix;
  matrix.resize(x);
  for(int i = 0; i < matrix.size(); i++){
    matrix.resize(y);
    for(int k = 0; k < matrix.size(); k++){
      cin >> matrix[i][k];
    }
  }
  for(int i = 0; i < strlen(argv[1]); i++){
    if(matrix[startRow][startCol + i] != sWord[i]){
      return false;
    }
    else{
      return true;
    }
  }
}

2 个答案:

答案 0 :(得分:1)

您在单个字符的地址上调用strlen():

char word;
argv[1] = &word;

...

for(int i = 0; i < strlen(argv[1]); i++){

strlen()需要一个以空值终止的字符数组,因为它只停留在空终止符&#39; \ 0&#39;。

由于变量&#34; word&#34;从来没有实际设置为任何东西,你的char变量将没有null终止符,因此strlen()将继续,直到它到达&#39; \ 0&#39;在内存中,在这种情况下,似乎超出了程序堆栈(&#34; word&#34;是一个本地堆栈变量,所以它的地址指向你的程序堆栈。)

我不确定你为什么要将argv [1]分配给char变量的地址,但这应该回答你关于你的程序意外终止的原因的问题。

答案 1 :(得分:0)

您没有正确初始化矩阵: 而不是

for (int i = 0; i < matrix.size(); i++) {
    matrix.resize(y);       

你可能打算写

for (int i = 0; i < matrix.size(); i++) {
    matrix[i].resize(y); //resizze "inner" vector