[問題] 全域動態陣列 釋放問題

看板C_and_CPP (C/C++)作者 (路邊小人物)時間16年前 (2009/08/13 17:00), 編輯推噓3(3011)
留言14則, 3人參與, 最新討論串1/1
請問我有靜態陣列改為一個動態陣列宣告為全域 (程式需要 一定要全域) 但是他的配置是在寫在aaa()裡面 所以我也把它的記憶體釋放擺在aaa()最後面 因為我的程式是用命令列跑大量次數 但是自從我把這個陣列從原本靜態改為動態後 自動跑到第三次就會出現當機 (如果手動單跑一次都不會) 我的配置如下 ------main.cpp 中--------------------- main { for(i=0;i<100;i++) //要跑很多次 aaa(s); } --------AAA.cpp 中--------------------- Prev_info ***Shortest=new Prev_info**[2200]; //全域宣告 int aaa(int s) { int f1,f2; for( f1=0;f1<2200;f1++) { Shortest[f1]=new Prev_info*[30]; } for( f1=0;f1<2200;f1++) { for( f2=0;f2<30;f2++) { Shortest[f1][f2]=new Prev_info[500]; //配置 } } 有一段程式給全部初始值0 ..... ..... ..... ..... int xx,yy; for(xx=0;xx<2200;xx++) { for( yy=0;yy<30;yy++) { delete [] Shortest[xx][yy]; //釋放 } delete [] Shortest[xx]; } delete [] Shortest; } ---------------------------------------------------------- 我原本想說反正整個程式還沒結束,就先不要釋放,反正每次進aaa我都會再給初始值 不怕數值錯誤,可是就算拿掉delete那段 也是會在跑到兩三次的時候當機 我懷疑是配置全域造成釋放有問題,可是卻能正常跑過二次 覺得很奇怪 目前也想不出問題出在哪裡 謝謝幫忙看完 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.179.7

08/13 17:21, , 1F
最後有需要delete[] Shortest嗎?
08/13 17:21, 1F

08/13 17:35, , 2F
我有拿掉那段過還是一樣 還是說配置也只能一次?
08/13 17:35, 2F

08/13 18:09, , 3F
當掉資訊 有辦法貼一下嘛
08/13 18:09, 3F

08/13 18:14, , 4F
我大概知道你為啥會盪 你***那邊只initial一次 你delete掉
08/13 18:14, 4F

08/13 18:15, , 5F
進去aaa也沒再對他new一次了 所以就有可能觸發一些run time
08/13 18:15, 5F

08/13 18:15, , 6F
error
08/13 18:15, 6F

08/13 18:16, , 7F
hortest=new Prev_info**[2200];寫到aaa裡面吧
08/13 18:16, 7F

08/13 18:18, , 8F
恩 多謝 應該是這原因 不過我現在把下面配置只有第一次跑
08/13 18:18, 8F

08/13 18:18, , 9F
也可以用了 也是說我現在只配置第一次就好了
08/13 18:18, 9F

08/13 18:20, , 10F
然後delete拿掉 最後跑完再做就好
08/13 18:20, 10F

08/13 18:29, , 11F
是你 2樓推文那樣嘛? 還有當掉嘛?
08/13 18:29, 11F

08/13 18:29, , 12F
不過我比較好奇 為啥不要全部for跑完再一次清 這樣overhead
08/13 18:29, 12F

08/13 18:29, , 13F
小很多吧
08/13 18:29, 13F

08/13 18:34, , 14F
恩 我已經改成最後才清了 感謝
08/13 18:34, 14F
文章代碼(AID): #1AWzOsWM (C_and_CPP)
文章代碼(AID): #1AWzOsWM (C_and_CPP)