2011年12月12日 星期一

[VC Debug] delete 引發的 0xfeeefeee [ heap memory ] 問題

因為有點時日沒碰C了,碰到了很久以前曾經發生過的問題。

問題點:
STACK * temp_stack=new STACK();
memcpy(temp_stack,this,sizeof(STACK));
delete temp_stack;

這三行程式碼,乍看之下好像沒甚麼不對。
可是當你按下Debug時,問題就來了。

其實解決分法就是...
用C的方法去做,如下:
STACK * temp_stack=(STACK *)malloc(sizeof(STACK));
memcpy(temp_stack,this,sizeof(STACK));
free(temp_stack);

問題點之二:
void operator =(datas & val)
{
  memcpy(this,&val,sizeof(datas));
};

解決方法就是別用memcpy...
雖然C歸C,C++歸C++。
但是有些在C上很好用的方法,用在C++上卻會出問題。
所以寫程式還是謹慎點。

順帶一提…Release程式是不會有這個問題的。
可是我有潔癖…

查資料時得到的豆知識
[ 0xCCCCCCCC ] 沒有被初始化的stack memory
[ 0xCDCDCDCD ] 沒有被初始化的heap memory
[ 0xFEEEFEEE ] 意指freefree, 就是已歸還的heap memory

沒有留言:

張貼留言