1

编译我的代码在两种模式下调试和发布都是成功的。调试模式执行并正常工作,但是当我执行发布模式时,它说“应用程序无法正确启动0x80000003”。VS2010下OpenCV 2.4.2发布模式下的运行时错误?

什么是这个错误,为什么调试模式可以正常工作,但没有发布。 用于调试和发布的DLL存在于相同的目录名称“bin”中。这两种模式的“lib”也放在同一个目录中。

我试图解决它很多方面,但没有成功?指导我如何解决这个问题?谢谢。

+0

DEBUG您的应用程序,并找出违规行。 – karlphillip

+0

我的代码中没有任何问题。我只使用3行代码。请在Frank Boyne的回答中阅读我的帖子。 – furqan

回答

0

为什么调试模式下工作正常,但不能释放

THRE可为什么一个建筑工作,而另一个没有原因是多方面的。数据结构的形状和大小可能因#ifdef而不同,或者因为编译器发出不同的代码,所执行的代码可能会不同 - 再次因为构造如#ifdef或由于编译器发出的代码。

这可以很重要,当你有代码与它的错误。假设你有一个错误计算数组长度的错误(或者一个结构的大小或者其他)。你做一些指针算术,并用指针将一些数据写入内存 - 只有你写错了地方。这个错误是否会破坏你的程序,可能取决于你被覆盖的内存中的内容。

如果幸运的话,您的程序几乎会立即崩溃,因为您重写的内容对于在错误后立即执行的某些代码很重要。如果你只是有点幸运,你的程序在一段时间后会在你程序的完全不同的部分崩溃,因为你重写的代码对于远离错误的代码是很重要的。如果你真的不幸,你的程序不会崩溃,直到几年后,当一个完全不相关的变化在内存中移动时,所以现在你突然重写的内容是重要。

有很多的东西有时被称为其他可能的原因Heisenbugs

这是什么错误

一个地方去寻找像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的地方。1H),你会发现,STATUS_BREAKPOINT被定义为((NTSTATUS)0x80000003L)

如何解决这个问题

诀窍是要弄清楚是什么原因造成的0x800000003(凡在你的代码它正在发生)所以你可以缩小它发生的原因。很可能这是一个例外,但为什么要跳到结论呢?

您可以在调试器内运行发布版本,就像运行调试版本一样 - 即使用发布目标构建代码,然后按F5或调试|开始调试。查看输出窗口,您可能会看到一些信息,这些信息可以帮助您解释错误。

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

当然,甚至可以在调试器中运行程序就足以改变事情,所以不会发生问题。

+0

感谢您的详细指导和解决方案。但是我在代码中没有任何错误。我只使用3行代码,即从文件加载图像并使用opencv显示图像。所以这意味着代码中没有可能。调试模式显示图像应该是。但是当我运行在发布模式时,它给了我那个错误。我正在使用OPencv 2.4.2的预编译库。 OpenCV中是否有任何错误或其他事情发生。 – furqan

+0

我也通过创建新项目来测试我的代码,但得到同样的错误。实际编译是可以的。没有什么是错的..但是当我们执行exe文件时的问题。最糟糕的是,我甚至无法从事件查看器或调试等任何地方检查这个错误。我认为dll中有错误。 ? – furqan

+0

这是使用调试的错误。 无法找到或打开PDB文件 test2.exe中0x77cd6fcb的第一次机会异常:0xC0000005:访问冲突读取位置0x00000128。 R6034 应用程序尝试错误地加载C运行时库。 – furqan

相关问题