我是cpp的新手,我正试图解决一个执行问题,但我遇到了细分错误。
代码的第一部分在于初始化向量的向量。(任务1)
然后是task2。我尝试在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;
}
答案 0 :(得分:6)
您需要学习使用调试器,因为它会很快告诉您它的分段错误。
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的边界之外进行访问。
mat [i] [j] == 1不适用于0个输入,因此将其转到else
else{
i++;
j++;
cout<<"i : "<<i << "j "<<j;
}
这很快将其置于垫子的范围之外。 它不是打印任务2,I,j等,因为它是行缓冲的-如果打印输出中有\ n,它将显示它们。