无法找出为什么我得到分段错误
Can't find out why im getting Segmentation fault
我试图解决一个练习,但遇到了Segmentation错误。
代码的第一部分包括初始化一个矢量。
然后是任务2。我试图在while cicle之前打印任务2,但它从未打印过。所以我猜错误在代码的第一部分!下面你可以找到你可以编译的代码。
您可以使用的可能输入:
0 0 0 0 0
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
下面可以找到可以编译的代码。
#include <iostream>
#include <vector>
using namespace std;
int main (){
const int matrix_size = 5;
int i =0,j=0,taskdone=0;
vector<vector<int>> mat(matrix_size, vector<int>(matrix_size));
for(i = 0;i < matrix_size; i++)
{
for(j = 0; j < matrix_size; j++)
{
cout <<"Value mat"<<mat[i][j] << "j is "<<j<< "n";
cin >> mat[i][j];
}
cout << endl;
cout << "Done "<<i<<"|n";
}
i =0;j=0;
cout << "task 2 ";
while(!mat[3][3]==1){
cout << "task 2 ";
if(mat[i][j]==1){
if(i<3){
mat[i+1][j]=1;
mat[i][j]=0;
taskdone++;
i++;
cout<< "task 1 "<<taskdone;
}else if (i>3){
mat[i-1][j]=1;
mat[i][j]=0;
taskdone++;
i--;
cout<< "task 2 "<<taskdone;
}
if(j<3){
mat[i][j+1]=1;
mat[i][j]=0;
taskdone++;
j++;
cout<< "task 3 "<<taskdone;
}else if (j>3){
mat[i][j-1]=1;
mat[i][j]=0;
taskdone++;
j--;
cout<< "task 4 "<<taskdone;
}
}else{
i++;
j++;
cout<<"i : "<<i << "j "<<j;
}
}
cout<<taskdone;
return 0;
}
您需要学习使用调试器,因为它会很快告诉您它在哪里出错。
Program received signal SIGSEGV, Segmentation fault.
main () at x.cpp:25
25 if(mat[i][j]==1){
(gdb) p i
$1 = 5
(gdb) p j
$2 = 5
您正试图访问垫子的边界之外。
mat[i][j]==1对于0输入不成立,因此它将转到其他
else{
i++;
j++;
cout<<"i : "<<i << "j "<<j;
}
这很快就把它放在垫子的边界之外。它没有打印任务2、I、j等,因为它是行缓冲的——如果你在打印输出中有一个,它会显示它们。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?