2010-11-03 24 views
3

我很沮丧,在释放模式我的应用程序崩溃在Windows 7我的C++应用程序崩溃,只有在释放模式和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

也许你应该一次删除一件东西,直到它工作,所以你知道该责怪什么。或者发布代码。 – vanza 2010-11-03 03:32:30

+1

哇。现在有一个好的。你是否包含除标准库之外的任何库?您可能想要检查是否有东西(以某种方式)挂接到main之前运行的_main函数。 – Earlz 2010-11-03 03:33:01

+2

另外,检查你的构造函数。是造成崩溃的全局对象的构造函数(这会在main之前发生)? – Earlz 2010-11-03 03:33:47

回答

-1

这听起来像它可能是一些内置设置/特性的。我没有太多东西可以提供给你(部分原因是缺少信息),但是如果它在Windows 7的DEBUG模式下工作,就像在DEBUG中设置RELEASE中的所有构建设置/属性一样。如果它有效,你知道这是一个构建设置的问题

+0

更有可能的是DEBUG构建中的设置隐藏了问题而未修复它 - 构建设置实际上不是问题。 – 2010-11-08 14:43:55

1

检查您正在使用的所有指针。它们会导致您的应用程序崩溃,表明您正在解引用空指针或超出预先分配的内存范围(例如数组)。这可能是由于未经初始化的指针或订阅索引太大所致。

它在调试模式下不会崩溃,因为在调试模式下,调试器通常会以预定义值(例如, 0xcccccccc,这在发布模式下不会发生。

0

即使它是一个发布二进制文件,您应该创建一个完整的符号文件(.pdb),以便您在发生问题时可以有一个体面的调用堆栈。为了得到它:启动任何调试器(WinDbg,Visual Studio等),设置它停止访问冲突异常,开始使用它进行处理,当发生异常并给你一个调用堆栈时它应该中断。请记住,调试器可以运行任何可执行的任务;即使您没有指向源代码和本地变量值的链接,也可能有其他有用的信息。

希望它有帮助。

相关问题