[問題] 副程式釋放記憶體相關問題

看板C_and_CPP (C/C++)作者 (大阪~大阪~)時間15年前 (2011/03/17 21:05), 編輯推噓3(3013)
留言16則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 主要是副程式的部分,我有使用動態配置(new),但在結束的時候也有用釋放記憶體的指令 但不知道為啥我打開工作管裡員來看,記憶體卻是一直增加,完全沒有減少的跡象 請問會是什麼問題?我已經debug好幾天了,但還是沒結果....... 或是有辦可以當副程式跑完後,將副程式使用到的記憶體完全釋放出來的指令? 一開始時宣告 float *e = new float [nN+2]; float *f = new float [nN+2]; float *ee = new float [nN+2]; float *ff = new float [nN+2]; 結尾return前使用 delete [] e; e = NULL; delete [] f; f = NULL; delete [] ee; ee = NULL; delete [] ff; ff = NULL; 在中間的運算過程中使用while再包大量的迴圈(for),這樣的運算會很吃記憶體嗎? 我跑一次大概增加1000K左右的記憶體,但因為會一直使用到這個副程式 所以最後就造成程式爆掉(強制關閉) 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/Ugr6BzUi 以上是我的副程式部分程式碼,因為整個程式碼大概有word 14頁這麼多~ 我自己努力找到最吃記憶體的元兇就是這個副程式 所以只貼了這部分的程式碼~ 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.96.33

03/17 21:08, , 1F
VC++ 版本是?
03/17 21:08, 1F

03/17 21:09, , 2F
忘了打 VC++ 6.0
03/17 21:09, 2F

03/17 21:10, , 3F
我會建議利用置底文的連結,貼上完整的程式碼
03/17 21:10, 3F
謝謝~我貼好了

03/17 21:20, , 4F
for loop 裡面還有繼續用 new ?
03/17 21:20, 4F
沒有再使用,只有一開始的部分~ ※ 編輯: yuyunmm 來自: 140.113.96.33 (03/17 21:24)

03/17 21:28, , 5F
creatematrix 所配置的記憶體沒釋放吧
03/17 21:28, 5F

03/17 21:29, , 6F
你的 code 非常糟糕,基本的變數名稱和縮排都沒做好
03/17 21:29, 6F
對不起~因為很急著想解決問題,沒有做到應有的整理,我會改進的

03/17 21:31, , 7F
喔我看到free(v)了
03/17 21:31, 7F

03/17 21:32, , 8F
不對啊,你的v是二維陣列,怎麼能用free去釋放
03/17 21:32, 8F
所以想請問大大,free是只能去釋放malloc所配置的一維矩陣嗎? 那我是利用malloc創造出二維矩陣應該要怎麼釋放?謝謝!! ※ 編輯: yuyunmm 來自: 140.113.96.33 (03/17 21:36)

03/17 21:44, , 9F
怎麼建立的就怎麼FREE
03/17 21:44, 9F

03/17 21:45, , 10F
你看一下 creatematrix 裡面是怎麼寫的
03/17 21:45, 10F

03/17 21:46, , 11F
大概是 v=malloc(...); for(...){ v[i]=malloc(...);}
03/17 21:46, 11F

03/17 21:46, , 12F
所以你要先對所有的 v[i] 進行 free,才能 free(v)
03/17 21:46, 12F

03/17 21:52, , 13F
很感謝大大的幫忙~我先試試看!謝謝!
03/17 21:52, 13F

03/17 22:03, , 14F
個人比較喜歡這種寫法 http://codepad.org/iEQQapuv
03/17 22:03, 14F

03/17 22:06, , 15F
其他動態陣列也可以這樣寫, 當印出來的值怪怪就可以
03/17 22:06, 15F

03/17 22:06, , 16F
知道存取違規, 而不是等到當機才發現
03/17 22:06, 16F
文章代碼(AID): #1DWWSamL (C_and_CPP)
文章代碼(AID): #1DWWSamL (C_and_CPP)