2011-10-08 106 views
0

當我試圖編譯我的程序時出現堆損壞錯誤。有問題的代碼是一個指針堆腐敗C++

cparticle * particles. 

它被初始化爲NULL,然後設置爲

particles = new cparticle[amount] 

我只使用在析構函數刪除一次,它是導致Windows觸發一個斷點。我試圖使用的應用驗證,它給我這個信息:

=========================================================== 
VERIFIER STOP 0000000000000013: pid 0x17C0: first chance access violation for current  stack trace 

000000001D54A0A4 : Invalid address being accessed 
0000000055741DC6 : Code performing invalid access 
000000000025E9D0 : Exception record. Use .exr to display it. 
000000000025E4E0 : Context record. Use .cxr to display it. 
=========================================================== 
This verifier stop is continuable. 
After debugging it use `go' to continue. 
=========================================================== 



======================================= 
VERIFIER STOP 00000013: pid 0x17C0: First chance access violation for current stack trace. 

1D54A0A4 : Invalid address causing the exception. 
55741DC6 : Code address executing the invalid access. 
001DF30C : Exception record. 
001DF35C : Context record. 


======================================= 
This verifier stop is continuable. 
After debugging it use `go' to continue. 

======================================= 

我不能確定什麼,我做錯了,所以任何幫助將不勝感激。

+1

除非我們看到更多的代碼,否則我們很難進行調試。 – Mysticial

+1

顯示代碼將有助於弄清楚你錯了什麼。 – Vinzenz

+1

同意@Mysticial和@Vinzenz。作爲第一個問題;你使用'delete'還是'delete []'? –

回答

2

你做錯的第一件事就是你沒有使用std::vector<particle>

第二件事大概是,你正在寫入內存超過你的粒子數組的末尾。

+0

哦,我認爲矢量佔用更多的空間,並且比陣列更加使用。哦,我只需要切換它。 – user975989

+0

矢量佔用稍多的空間,你不應該擔心與他們的表現。這就是說,使用數組非常好 - C++畢竟允許。 – Pubby

+2

這是一個愚蠢的評論。你可能更喜歡他使用'vector',但它不是使用原始指針,使他的代碼不正確。因此,你的設置(「你做錯的第一件事......」)對我來說就像是煽動性的。你可能有很好的建議STL的理由,但這不是一種提倡你喜歡的風格的好方法,除了這個問題之外,這與問題有些不相干。 – asveikau

3

你是否在一個小型的獨立程序中重現了這一點?你確定它不是由之前未被發現的其他內存違規引起的嗎?你使用了正確的刪除操作符嗎?