C++ 我的C++;应用程序仅在发布模式和Windows 7下崩溃
我对我的应用程序在Windows7的发布模式下崩溃感到非常沮丧 在main函数中,我删除了所有内容:C++ 我的C++;应用程序仅在发布模式和Windows 7下崩溃,c++,debugging,windows-7,crash,release,C++,Debugging,Windows 7,Crash,Release,我对我的应用程序在Windows7的发布模式下崩溃感到非常沮丧 在main函数中,我删除了所有内容: int main(int argc, char **argv, char **envp) { return (0); } 但我有很多指令、变量和函数是在主函数之外定义的 它只在Windows7的发布模式下崩溃。 Windows7上的调试模式正常; Windows XP上的调试和发布模式都可以 由于我无法调试,我不知道该做什么 错误是: Unhandled exception at 0x
int main(int argc, char **argv, char **envp) {
return (0);
}
但我有很多指令、变量和函数是在主函数之外定义的
它只在Windows7的发布模式下崩溃。
Windows7上的调试模式正常;
Windows XP上的调试和发布模式都可以
由于我无法调试,我不知道该做什么
错误是:
Unhandled exception at 0x00dc21ca in MyApp.exe: 0xC0000005: Access violation reading location 0x8496a9bb.
装配线:
00DC21CA mov eax,dword ptr [edx+0Ch]
这太疯狂了,请帮帮我
彼得
附言:如果我删除了我在主界面之外定义的所有内容,那就没关系了
附言:
char* AllocArgsMemory()
{
return (char*)malloc(2); // works: return NULL
// So it seems the malloc has some problems
}
听起来可能是一些内置设置/属性。我没有太多的东西可以提供给你(部分原因是缺乏信息),但是如果它在Windows7的调试模式下工作,就像在发布版中设置所有的构建设置/属性一样。如果工作正常,您就知道生成设置有问题,请检查您正在使用的所有指针。应用程序崩溃的方式表明,您正在取消引用空指针或超出预先分配的内存范围(如数组)。这可能是由于指针未斜体或订阅索引太大所致
它在调试模式下不会崩溃,因为在调试模式下,调试器通常使用预定义的值初始化非斜体内存,例如0xCCCC,这在发布模式下不会发生 即使它是一个发行版二进制文件,也应该创建一个完整的符号文件(.pdb),以便在出现问题时有一个合适的调用堆栈。 要获得它:启动任何调试器(WinDbg、visualstudio等),将其设置为在访问冲突异常时停止,用它启动您的进程,当异常发生时它应该会中断,并给您一个调用堆栈。 记住调试器可以运行任何可以执行的东西;即使您没有到源代码和局部变量值的链接,也可能有其他有用的信息
希望有帮助。也许你应该一次移除一件东西,直到它起作用,这样你就知道该责备什么了。或者发布代码。哇。现在有一个好的。除了标准库之外,还有其他库吗?您可能需要检查是否有东西(不知何故)连接到在main之前运行的_main函数。此外,请检查您的构造函数。全局对象的构造函数是否导致崩溃(发生在main之前)?将其放在.NET framework上;)如果全局(命名空间级别)对象依赖于其他对象的初始化,则可能会发生这种情况。不同的编译器可以以不同的顺序初始化对象,这就是为什么在不同的平台上会看到不同的行为。您必须找出导致崩溃的对象。更可能的是,调试版本上的设置隐藏了问题而没有修复它——版本设置实际上不是问题所在。