[問題] recursive and stack

看板C_and_CPP作者 (JACK)時間15年前 (2010/03/03 20:42), 編輯推噓2(206)
留言8則, 3人參與, 最新討論串1/1
請問一下 recursive 和 stack有什麼關係呢 剛剛google一下 沒找到= = 最近看到一個程式是關於parser 目錄的程式 大致上是長這樣子 showfolder是一個遞迴程式 不斷的往下尋找資料夾 並且印出來 這裡我會產生五百甚至一千個資料夾 使用系統是linux 問題是: case1: 大概parser到四百多個目錄就會當掉了(如果沒有加closedir這一行的話) 雖然沒有跑完 也沒印出結果 但是記憶體狀況如下 40M(跑之前)-->1M(正在跑)-->40M(沒跑完) case2: 有加closdir這一行跑起來都沒問題 但是我使用linux 的指令free去看記憶體的時候 好像記憶體不見了 40M --> 1M --> 1M 也就是他結果有印出來 但是記憶體卻沒吐回來 還是1M我以為會回來40M 想知道: 1.是不是stack暴掉了 我可以藉由改linux的stack size改善? 2.linux裡面有所謂的目錄限制嗎? 3.closedir不加跟有加 為什麼差那麼多呢 記憶體消失? 4.recursive 改成 for loop型式 有這樣的程式嗎 小弟還是新手 所以有很多問題:D 請多多包含:D int showfolder(char *path) { ... ... dir=opendir(PATH); ... while((dirent = readdir(dir)) != NULL ){ ... lstat(pathname, &stat); if(S_ISDIR(stat.st_mode)) { ... showfolder(pathname); } ... } puts(buf); memset(buf, 0, sizeof(buf)) closedir(dir) // strange ?? return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.138.144

03/03 21:44, , 1F
你把 DIR* 想成和 FILE* 差不多的東西就是了
03/03 21:44, 1F

03/03 21:45, , 2F
只不過 DIR* 用 opendir/closedir FILE* 用 fopen/fclose
03/03 21:45, 2F

03/03 21:45, , 3F
也就是說沒有 closedir 的後果跟開一堆檔案沒有 fclose 一樣
03/03 21:45, 3F

03/03 21:47, , 4F
上面應該回答了 3. 而 4. 的話 有 提示是你的標題
03/03 21:47, 4F

03/03 21:48, , 5F
(不過說起來這改過去還比較適合 while loop...)
03/03 21:48, 5F

03/03 23:50, , 6F
那小弟回應你第一句: Google 遞迴 堆疊 :)
03/03 23:50, 6F

03/03 23:52, , 7F
closdir有加的話記憶體才會消失
03/03 23:52, 7F

03/04 00:23, , 8F
用中文搜尋找到一些東西 感謝囉~~
03/04 00:23, 8F
文章代碼(AID): #1BZbb96n (C_and_CPP)