2010年4月27日 星期二

_BLOCK_TYPE_IS_VALID error

在我用java呼叫dll時出現了這個問題


奇怪的是在我用visual studio 2005時正常可以work,
當我換成visual studio 2008時卻出現這個錯誤?!
檔案明明都一樣卻有這個問題.

因為dll檔是用來呼叫用很難debug,
所以只好把整個程式碼改寫回一般的win32 console程式,
再run來抓錯誤.
結果發現是有一個地方釋放記憶體的問題:

dpTrellis = (DPTRELLIS*) malloc(frameNumbers * sizeof(DPTRELLIS));
............
free(dpTrellis);
照理說這樣寫應該沒錯
但在debug mode下停在free(dpTrellis)這行查看dpTrellis值會發現並未定義,
唯一的解釋就是這個dpTrellis在別的function內已經刪除過了,所以再次刪除就error.
把這段程式碼comment掉就沒問題了.

令人好奇的是為什麼在visual studio 2005可以正常work,
visual studio 2008不是應該向下相容嗎,
頂多來個warning不就好了嗎.

MS檢查真是越來越嚴格了,
嚴格到自家的產品都不相容了 Orz.