[問題] 程式出錯,疑似動態矩陣有問題

看板C_and_CPP (C/C++)作者 (生命會找到出路)時間16年前 (2009/09/26 15:19), 編輯推噓0(009)
留言9則, 4人參與, 最新討論串1/1
已經為了這個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
(呃, 我的意思應該是「能給你 malloc/calloc 的空間」)
09/26 20:12, 2F

09/26 21:58, , 3F
我的記憶體插滿4g 程式執行時 我看工作管理員 只用了不到2g
09/26 21:58, 3F

09/26 23:20, , 4F
跟實體記憶體無關, 就算你插128MB還是可以做allocate
09/26 23:20, 4F

09/26 23:36, , 5F
有檢查 calloc 的 return 值嗎?
09/26 23:36, 5F

09/26 23:41, , 6F
請問calloc的return值要怎看呢?
09/26 23:41, 6F

09/26 23:44, , 7F
當程式出錯時 我進入debug的視窗 按右鍵選"Run to cursor"
09/26 23:44, 7F

09/26 23:44, , 8F
程式就會繼續再跑 但一樣再跑一萬多點又會出錯
09/26 23:44, 8F

09/26 23:49, , 9F
我捉了圖 這樣比較清楚 http://tinyurl.com/y8lg387
09/26 23:49, 9F
文章代碼(AID): #1AlS1kiI (C_and_CPP)
文章代碼(AID): #1AlS1kiI (C_and_CPP)