[問題] 程式跑完出現segmentation fault然後當掉

看板C_and_CPP作者 (起床氣)時間14年前 (2010/12/02 19:37), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串1/1
用dev-c++做了一個模擬走迷宮的程式, 也順利的跑到最後,但是要結束的時候就會當掉,debug說是segmentation fault 可是我完全不知道怎麼解決...... #include <iostream> #include <iomanip> using namespace std; #define A 2 #define B 0 char k; void maze(char(*)[13]); void gogo(char(*)[13]); void judge(char &,int &,int ,int ,char(*)[13]); int main() { char m[12][13]={"############", "#...#......#", "X.#.#.####.#", "###.#....#.#", "#....###.#..", "####.#.#.#.#", "#..#.#.#.#.#", "##.#.#.#.#.#", "#........#.#", "######.###.#", "#......#...#", "############"}; maze(m); cout<<"程式結束\n"; system("PAUSE"); return EXIT_SUCCESS; } void maze(char (*m)[13]) //印出迷宮的圖 { system("CLS"); for(int i=0;i<=11;i++){ for(int j=0;j<=12;j++) cout<<m[i][j]<<" "; cout<<endl;} if(k=='0')return; gogo(m); } void gogo(char(*m)[13]) //往四個方向輪流做判定 { static int a=A,b=B; static int di=1;//direction char z; switch(di%4) { case 0: z=m[a+1][b]; judge(z,di,a,b,m); m[a+1][b]=z; a=a+1; break; case 1: z=m[a][b+1]; judge(z,di,a,b,m); m[a][b+1]=z; b=b+1; break; case 2: z=m[a-1][b]; judge(z,di,a,b,m); m[a-1][b]=z; a=a-1; break; case 3: z=m[a][b-1]; judge(z,di,a,b,m); m[a][b-1]=z; b=b-1; break; } if(k=='0')return; system("PAUSE"); maze(m); } void judge(char &z,int &di,int a,int b,char(*m)[13]) //判定旁邊的是不是牆等等 { if(z=='#'){di++; gogo(m);} if(z=='.'){z='X'; di+=3;} else if(z=='X'){m[a][b]='.'; di+=3;} if(z=='\0'){k='0';return;} } 另外想順便問一下,遞迴多次後想結束程式的話,一定要用return直到回到main函數嗎? 有沒有其他方式呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.41.55

12/03 03:48, , 1F
1.終點判斷? =='\0'不會動吧 所以就撞出memory boundary
12/03 03:48, 1F

12/03 03:49, , 2F
2. exit() ps. 請愛用gdb
12/03 03:49, 2F

12/03 03:50, , 3F
如果是要結束程式,可以直接呼叫 exit 函式
12/03 03:50, 3F

12/03 12:56, , 4F
走迷宮的邏輯散佈在各函式裡...
12/03 12:56, 4F
文章代碼(AID): #1Cz_MLbN (C_and_CPP)