[問題] delete與堆積損毀

看板C_and_CPP (C/C++)作者 (la8day)時間13年前 (2012/12/27 03:58), 編輯推噓0(007)
留言7則, 3人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 2008 問題(Question): 用new配置一個array後,然後delete。但VC此時跳出來說已觸發中斷點,堆積損毀等等 爬文+google之後發現也有人有類似情況,但初學不久,檢查code老半天還是看不出來 哪裡有問題.... 我把code簡化了,原本的I/O、功能應該不太重要 問題應該就是出在那個*setPoly 如果把delete [] setPoly那邊註解掉,或是把那個for迴圈的內容也砍了就不會有問題 不過我想這code已經這麼短了....debug很久還是不得其解囧 程式碼(Code):(請善用置底文網頁, 記得排版) void readIO(int argc, char *argv[]) { int *setPoly=0; int i; int j=5; Icount = 8; Ocount = 4; Pcount = 5; NUM_PRT = 17; setPoly = new int (1000); cout<<"Pcount ="<<Pcount<<endl; for(i=0;i<Pcount;i++) { *(setPoly+i) = j; cout<<"setPoly->"<<*(setPoly+i)<<endl; } delete [] setPoly; } 補充說明(Supplement): 原本int *setPoly我是設成全域變數,而且是在main去釋放他 但後來改成區域變數且在同個function釋放也是同樣問題,我想應該無關? 明顯是*setPoly在作怪,不釋放記憶體就可以正常執行。但到了其他function可能會 繼續造成危害。 這code和問題好像都沒啥程度> <,不過已經困擾頗久,還請各位高手來解惑~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.182.224.51

12/27 04:14, , 1F
setPoly = new int[ 1000 ]; 本來只有配置一個整數
12/27 04:14, 1F

12/27 04:45, , 2F
囧囧囧 確實是如此...就這樣過了好幾個小時....
12/27 04:45, 2F

12/27 04:49, , 3F
我似乎把它和malloc搞混
12/27 04:49, 3F

12/27 04:58, , 4F
扯的是這樣也能執行...不過花了不少時間看VC配置警戒值
12/27 04:58, 4F

12/27 04:58, , 5F
等文章 想來覺得問這問題好像很白痴XD
12/27 04:58, 5F

12/27 08:19, , 6F
一個大原則是 new [] 搭配 delete [], new 搭配 delete
12/27 08:19, 6F

12/27 08:19, , 7F
如果你兩邊不匹配通常就是有哪個地方邏輯有問題
12/27 08:19, 7F
文章代碼(AID): #1GsrRrZ- (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1GsrRrZ- (C_and_CPP)