为什么会出现分段错误以及如何解决?
我正在编写下面的代码以递归地“遍历”迷宫并找到路径总数。我正在使用堆栈来跟踪“下一步”。
ROWS 和 COLUMNS 定义了迷宫的大小。如果我使这些参数大于 9x9,则会出现分段错误。我不知道我为什么会这样。
这是我第一次使用 gdb 并得到以下信息:
#3 0x0000000000400de0 in std::stack<xy, std::deque<xy, std::allocator<xy> > >::top (this=0x604400 <buff>)
at /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/stl_stack.h:161
161 return c.back();
让我相信这与我的堆栈有关。
我很感激任何帮助。谢谢。
编码:
#define ROWS 10
#define COLUMNS 10
#include<iostream>
#include<stack>
using namespace std;
struct xy
{
long i;
long j;
};
stack<xy> buff;
long goRight (long j)
{
if (j < COLUMNS-1)
return 1;
else
return 0;
}
long goDown (long i)
{
if (i < ROWS-1)
return 1;
else
return 0;
}
long traverse (xy POS)
{
long fD = goDown(POS.i);
long fR = goRight(POS.j);
xy toAdd;
if (fD == 1)
{
toAdd.i=POS.i+1;
toAdd.j=POS.j;
buff.push(toAdd);
}
if (fR == 1)
{
toAdd.i=POS.i;
toAdd.j=POS.j+1;
buff.push(toAdd);
}
if(buff.empty())
return 0;
toAdd = buff.top();
buff.pop();
return (traverse(toAdd) + (fD * fR));
}
int main()
{
xy initial;
initial.i=0;
initial.j=0;
cout << 1 + traverse(initial);
return 1;
}