gpt4 book ai didi

c++ - 在 C++ 中使用 STL 时解决边界错误

转载 作者:行者123 更新时间:2023-11-28 05:50:14 24 4
gpt4 key购买 nike

我正在编写程序来寻找通过定义矩阵的路径。

#include<iostream>
#include<list>

using namespace std;

class maze{
int inst[10][10];
int m,n,initr,initc,finalr,finalc;
public:
maze(int c){
if(c==1) return;
cout<<"\n Enter rows and colums: ";
cin>>m>>n;
cout<<endl<<"\n ENter initial configuration (1 for block, 0 for open):";
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>inst[i][j];
}
}
cout<<endl<<"Enter initial state in row column:";
cin>>initr>>initc;
cout<<endl<<"Enter final state in row column:";
cin>>finalr>>finalc;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(inst[i][j]==1) inst[i][j]=(-1);
}
}
inst[initr][initc]=1;
}
bool up(int curr){
int x,y;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(inst[i][j]==curr) {
x=i;
y=j;
break;
}
}
}
if(x==0) return false;
if(inst[x-1][y]==0){
//cout<<"\n up "<<x-1<<y;
inst[x-1][y]=curr+1;
return true;
}else return false;

}
bool down(int curr){
int x,y;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(inst[i][j]==curr) {
x=i;
y=j;
break;
}
}
}
if(x==m-1) return false;
if(inst[x+1][y]==0){
//cout<<"\n down "<<x+1<<y;
inst[x+1][y]=curr+1;
return true;
}else return false;

}
bool left(int curr){
int x,y;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(inst[i][j]==curr) {
x=i;
y=j;
break;
}
}
}
if(y==0) return false;
if(inst[x][y-1]==0){
//cout<<"\n left "<<x<<y-1;
inst[x][y-1]=curr+1;
return true;
}else return false;

}
bool right(int curr){
int x,y;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(inst[i][j]==curr) {
x=i;
y=j;
break;
}
}
}

if(y==n-1) return false;
if(inst[x][y+1]==0){
//cout<<"\n right "<<x<<y+1;
inst[x][y+1]=curr+1;
return true;
}else return false;

}
bool check(int curr){
int x,y;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(inst[i][j]==curr) {
x=i;
y=j;
break;
}
}
}
if(x==finalr && y==finalc) return true;
else return false;
}
void print_maze(){
cout<<endl<<endl;
for(int i=0;i<m;i++){
cout<<endl;
for(int j=0;j<n;j++){
cout<<"\t"<<inst[i][j];
}
}
}

};

bool state_search(){
int curr=1;
maze start(0),temp(1);
list<maze> queue;

queue.push_back(start);
while(!queue.empty()){
start = queue.front();
queue.pop_front();
if(start.check(curr)){
start.print_maze();
return true;
}
//start.print_maze();

temp=start;
if(temp.up(curr)) queue.push_back(temp);

temp=start;
if(temp.down(curr)) queue.push_back(temp);

temp=start;
if(temp.left(curr)) queue.push_back(temp);

temp=start;
if(temp.right(curr)) queue.push_back(temp);

curr++;
}
cout<<"\n No answer found";
}


int main(){
state_search();
}

该程序适用于大多数输入。但是给出了以下输入的地址边界错误

Enter rows and colums: 4 4

ENter initial configuration (1 for block, 0 for open):0 0 0 0 0 1 0 1 0 1 1 1 0 0 0 0

Enter initial state in row column:1 0

Enter final state in row column:3 3 fish: “./a.out” terminated by signal SIGSEGV (Address boundary error)

请指出此错误的可能原因以及如何更正

最佳答案

问题是您没有在上、下、左、右函数中初始化xy 值。然后,如果您没有找到 curr 的索引,您可以在随机索引处访问 inst 数组。

right 函数中,您应该像这样声明 x 和 y:

int x = 0,y = 0;

左侧:

int x = m - 1,y = 0;

做同样的事情。

关于c++ - 在 C++ 中使用 STL 时解决边界错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35403869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com