gpt4 book ai didi

visual-studio-2010 - 在VS2010下的OpenCV 2.4.2中, Release模式下的运行时错误?

转载 作者:行者123 更新时间:2023-12-02 16:42:32 26 4
gpt4 key购买 nike

在调试和发布两种模式下,我的代码编译均成功。 Debug模式执行并且工作正常,但是当我执行 Release模式时,它说“应用程序无法正确启动0x80000003”。

这是什么错误,为什么 Debug模式可以正常运行但不能释放。
用于调试和发布的DLL位于相同的目录名称“bin”中。两种模式的“lib”也放置在同一目录中。

我尝试过多种解决方法,但没有成功?指导我如何解决这个问题?谢谢。

最佳答案

why debug mode works fine but not release



这可能是一个构建起作用而另一个构建不起作用的许多原因。由于 #ifdef或由于编译器发出的代码不同,因此数据结构的形状和大小可能会有所不同,再次执行的代码可能会有所不同-再次由于 #ifdef之类的构造,或者由于编译器正在发出的代码。

当您的代码中包含错误时,这可能很重要。假设您有一个错误地计算了数组的长度(或结构的大小或其他)的错误。您需要执行一些指针算术运算,并使用该指针将一些数据写入内存中-只有在写入错误的位置。该错误是否会破坏您的程序,可能取决于您重写的内存中的内容。

如果您很幸运,您的程序几乎立即崩溃,因为您重写的内容对于在错误后立即执行的某些代码很重要。如果您只是幸运的话,您的程序会在一段时间后在程序的完全不同的部分崩溃,因为重写的内容对于远离错误的代码很重要。如果您真的很倒霉,那么直到几年后完全不相关的更改将所有内容移动到内存中时,程序才根本不会崩溃,因此现在突然覆盖的内容很重要。

还有许多其他可能的原因有时也称为 Heisenbugs

What is this error



查找诸如0x80000003之类的错误的一个地方是文件WinError.h,您可以在使用的SDK中找到该文件(Visual Studio 2010附带的文件或以后安装的文件)。查看WinError.h,您会发现 E_INVALIDARG定义为 _HRESULT_TYPEDEF_(0x80000003L)

但这并不一定有帮助,因为我们对返回错误的原因,为什么返回该错误甚至您的0x80000003实际上是E_INVALIDARG的了解不多,它可能是其他一些具有相同值的错误,或某些代码误用了E_INVALIDARG或其他内容。

另一种可能性是0x80000003是被抛出的 hard-coded breakpoint exception-最有可能是因为您的程序已到达那些“这永远都不会发生”的地方,唯一有意义的是抛出异常并崩溃。如果查看NtStatus.h(与找到WinError.h的位置相同),您会发现 STATUS_BREAKPOINT定义为 ((NTSTATUS)0x80000003L)

how to solve this issue



诀窍是找出导致0x800000003的原因(以及代码在何处发生),以便您缩小发生原因的范围。这很可能是一个异常(exception),但是为什么要下结论呢?

您可以像运行调试版本那样在调试器中运行发行版本-即,使用Release目标构建代码,然后按F5或Debug |开始调试。在“输出”窗口中查看,您可能会看到一些有助于您解释该错误的信息。

您也可以使用Debug | “异常(exception)”菜单添加一个值为80000003的新Win32异常(exception),并将其设置为在抛出时中断而不是在未处理时中断。这样,您应该在引发该异常时(如果实际上已引发)在调试器中停止。

当然,即使在调试器中运行程序也足以更改内容,因此不会出现问题。

关于visual-studio-2010 - 在VS2010下的OpenCV 2.4.2中, Release模式下的运行时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12271068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com