我的这个程序compiler没错,调试时报错:Unhandled exception at 0x004114d3 in XXXX.exe, access violation reading location on 0x0000002c. 有没有战友碰到过类似的问题,你们是怎么解决得?谢谢
解决方案 »
- 哪里有教图形处理和算法的,网上学校啊?
- 关于dll和lib里的类的参数问题
- 如何获知程序是在第几块硬盘上?
- ShellExecute()连接远程服务器上共享文件夹的问题。
- 为什么双击CListCtrl空白的地方也会有反应?
- 在CSocket中,server端用new生成了一些连接用的socket,在客户端关闭时这些生成的socket还有必要delete调吗。
- 请教两个关于开发环境中控件实现的简单问题。谢谢!
- 如何减小视图闪烁
- 求教!一个很奇怪的问题
- 我想配台图形工作站,希望大家推荐配置.
- 求前辈们指点,最近比较有时间,做点啥小项目实践下子?
- 关于在unicode下cstring的使用的问题,谢谢!
可以参考下面来修改可能导致程序崩溃的代码。 DEBUG和RELEASE 版本差异及调试相关问题:
. 内存分配问题
1. 变量未初始化。下面的程序在debug中运行的很好。
thing * search(thing * something)
BOOL found;
for(int i = 0; i < whatever.GetSize(); 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为单位),所以在debug版中如果你写ele[6],可能不会有什么问题,而在release版中,就有ACCESS VIOLATE。