【发布时间】:2012-12-20 01:35:48
【问题描述】:
为什么会出现分段错误以及如何解决?
我正在编写下面的代码以递归方式“遍历”迷宫并找到路径总数。我正在使用堆栈来跟踪“下一步”。
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;
}
【问题讨论】:
-
为什么使用递归而不是迭代?
-
使用递归没有特别的原因。我首先想到了这个解决方案——仅此而已。
标签: c++ recursion stl stack segmentation-fault