セグメンテーション違反が発生する理由とその修正方法を教えてください。
以下のコードを書いて、迷路を再帰的に「トラバース」し、パスの総数を見つけます。「次のステップ」を追跡するためにスタックを使用しています。
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;
}