[問題] 程式出錯,疑似動態矩陣有問題
已經為了這個bug找了好幾天了
真的找不出來 想上來請問一下各位的看法
小弟寫了一個程式
用tree的方式去找一個陣列h中所有符合條件的路徑
搜尋的方式是以"行" 所以當 h 的大小為 M*N時
我的程式就會搜索j=0,1,...,N-1(共N次)
當h小於2萬多時 程式都沒有問題 可以跑到完
但當h為2萬多時 我的程式從j=0開始跑
但卻跑到j=10792時 就出錯了 如下圖所示
http://photo.xuite.net/andy1207/18160/4.jpg

我有去debug 發現是錯在一個動態陣列宣告的地方
但小弟怎看 都覺得沒有寫錯 就是找不出錯
也上網找了很久的資料 還是沒法解決
所以想麻煩各位能幫忙看看 看是小弟那寫錯了
底下為部分的程式碼
我寫了一個tree.h檔如下:
http://codepad.org/atlag8m1
在一個girth_check()中開使搜索,程式碼如下:
for (j = 0; j < N; j++) {
make_tree(markr, markc, col_flag1, row_flag1, girth, j, &tree_root);
find_cycle(tree_root, girth, &cycle_list_top, &num_cycles);
.
. (這邊只是搜索完 若有符合條件的 就儲存到一個文件檔中)
.
}
但當j=10792時 程式會在make_tree這個function出錯
我把make_tree的程式碼完整貼出來 以便大家幫忙看一下
http://codepad.org/Wksky2bd
在這個make_tree中 底下的地方
num_nbrs = current_node->num_children;
current_node->branches = (struct tree *) calloc(num_nbrs,sizeof(struct tree));
就是我跑了1萬多點後
會出錯的地方 剛好是一個動態陣列的宣告 但我怎看都不覺得這有問題
大家可能會問 我一直宣告 但卻沒有free掉
我是在find_cycle這個function中去free掉
因為make_tree把所有的都找完後 有些其實是同一條
我把部分的 find_cycle 代碼貼上來
http://codepad.org/U6tO3DC9
free(current_node->branches); /* which is the root node */
free(current_node); /* which is the root node */
謝謝大家把它看完
也希望大家能給我點意見
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.114.107.90
※ 編輯: stric 來自: 58.114.107.90 (09/26 15:39)
※ 編輯: stric 來自: 58.114.107.90 (09/26 15:43)
※ 編輯: stric 來自: 58.114.107.90 (09/26 15:50)
※ 編輯: stric 來自: 58.114.107.90 (09/26 15:52)
→
09/26 20:12, , 1F
09/26 20:12, 1F
→
09/26 20:12, , 2F
09/26 20:12, 2F
→
09/26 21:58, , 3F
09/26 21:58, 3F
→
09/26 23:20, , 4F
09/26 23:20, 4F
→
09/26 23:36, , 5F
09/26 23:36, 5F
→
09/26 23:41, , 6F
09/26 23:41, 6F
→
09/26 23:44, , 7F
09/26 23:44, 7F
→
09/26 23:44, , 8F
09/26 23:44, 8F
→
09/26 23:49, , 9F
09/26 23:49, 9F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章