我对Windows 7上的发布模式中的应用程序崩溃感到非常沮丧。
在主要功能中,我删除了所有内容:
int main(int argc, char **argv, char **envp) {
return (0);
}
但我确实在主要功能之外定义了很多指令,变量和函数。
它仅在Windows 7的发布模式下崩溃。 Windows 7上的调试模式没问题; Windows XP上的调试和发布模式都可以。
由于我无法调试,我不知道该怎么做。
错误是:
Unhandled exception at 0x00dc21ca in MyApp.exe: 0xC0000005: Access violation reading location 0x8496a9bb.
装配线:
00DC21CA mov eax,dword ptr [edx+0Ch]
这太疯狂了,请帮帮忙。
彼得
P.S。:如果我删除了我在主要部分之外定义的所有内容,那就没关系。
P.S。:
char* AllocArgsMemory()
{
return (char*)malloc(2); // works: return NULL
// So it seems the malloc has some problems
}
答案 0 :(得分:1)
检查您正在使用的所有指针。它们的应用程序崩溃方式表明您正在取消引用空指针或在预先分配的内存范围之外(例如数组)。这可能是由于未经初始化的指针或订阅索引太大。
它在调试模式下不会崩溃,因为在调试模式下,调试器通常会使用预定义的值(例如,预定义的值)进入未初始化的内存。 0xcccccccc,在发布模式下不会发生。
答案 1 :(得分:0)
即使它是一个发布二进制文件,您也应该创建一个完整的符号文件(.pdb),这样您就可以在出现问题时拥有一个不错的callstack。 为了得到它:启动任何调试器(WinDbg,Visual Studio等),设置它以停止访问冲突异常,开始使用它进行处理,它应该在异常发生时中断并给你一个callstack。 请记住,调试器可以运行任何可以执行的操作;即使您没有源代码和局部变量值的链接,您也可能有其他有用的信息。
希望它有所帮助。
答案 2 :(得分:-1)
听起来它可能是一些内置的设置/属性。我没有太多东西可以提供给你(部分是因为缺少信息),但如果它在Windows 7中以DEBUG模式工作,就像在RELEASE中设置所有构建设置/属性一样与DEBUG相同。如果它有效,您知道这是构建设置的问题