分配是通过在命令行中放置单词和起点来搜索矩阵内的单词(仅从左到右),如果单词在那里则返回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;
}
}
}
答案 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