2024年4月21日发(作者:)
DEBUG和RELEASE 版本差异及调试相关问题:
I. 内存分配问题
1. 变量未初始化。下面的程序在debug中运行的很好。
thing * search(thing * something)
BOOL found;
for(int i = 0; i < e(); i++)
{
if(whatever[i]->field == something->field)
{ /* found it */
found = TRUE;
break;
} /* found it */
}
if(found)
return whatever[i];
else
return NULL;
而在release中却不行,因为debug中会自动给变量初始化found=FALSE,而在
release版中则不会。所以尽可能的给变量、类或结构初始化。
2. 数据溢出的问题
如:char buffer[10];
int counter;
lstrcpy(buffer, "abcdefghik");
在debug版中buffer的NULL覆盖了counter的高位,但是除非counter>16M,
什么问题也没有。但是在release版中,counter可能被放在寄存器中,这样NULL就覆
盖了buffer下面的空间,可能就是函数的返回地址,这将导致ACCESS ERROR。
3. DEBUG版和RELEASE版的内存分配方式是不同的 。如果你在DEBUG版
中申请 ele 为 6*sizeof(DWORD)=24bytes,实际上分配给你的是32bytes(debug版
以32bytes为单位分配), 而在release版,分配给你的就是24bytes(release版以8bytes
发布评论