Visual Studio 2010中的libx264 - 发布版本中的内存错误

时间:2010-12-08 19:01:31

标签: c++ visual-studio-2010 x264

我正在构建一个应用程序并使用x264库作为编码器。我使用MSys / MingW为我的Windows系统构建了库。该库在调试版本下工作正常(注意调试和发布版本都使用默认的VS2010设置)。但是,在发布时,第一次调用x264库时会引发访问冲突错误,具体为:

  Unhandled exception at 0x00905a4d in StreamTest.exe:
  0xC0000005: Access violation.

此行引发错误:

x264_param_default_preset((params), "veryfast", "zerolatency");

当我弄清楚如何编译库时,我遇到了很多关于Windows / Visual Studios中内存对齐的讨论,以及它与x264预期的对齐方式不太一致。例如,当在MSys中编译时,我必须启用--enable-memalign-hack。我想知道此错误的来源是否可能源于内存对齐问题,该问题仅通过我的发布版本中的某些设置显示出来。不幸的是,我对这些细节几乎一无所知,所以来到这里。

任何人都可以向我提供有关内存对齐问题以及可能导致此问题的任何Visual Studio设置的更多信息吗?任何其他提示/指针来解决这个问题都是非常受欢迎的。

感谢。

修改

从下面的回答:

  1. 从链接的SO问题中我得到的印象是他在OpenCV构建中添加了“使用调试器信息构建”吗?由于我使用G ++通过MSys构建x264库,我不确定我能做到这一点。我已经检查了我的项目的构建设置,并且在发布和调试下它都有调试器信息。不确定我是否遗漏了该帖子中的内容,请告诉我。
  2. 我尝试了应用验证程序。似乎x264正在尝试根据App验证程序输出执行来自非可执行内存的代码:

    VERIFIER STOP 0000000000000650: pid 0x1B18: 
    

    尝试在非可执行内存中执行代码(第一次机会)。

    0000000000905A4D : Address being accessed.
    0000000000905A4D : Code performing invalid access.
    000000000021EA90 : Exception record. Use .exr to display it.
    000000000021E5A0 : Context record. Use .cxr to display it.
    
  3. 从这个输出中收集什么?

    再次感谢。

1 个答案:

答案 0 :(得分:2)

请参阅类似问题here,看看是否对您有帮助。

修改

发布您还希望通过AppVerifier

运行您的应用程序

修改

在我看来,“使用调试器信息构建”相当于将-g开关与优化开关一起打开并关闭任何DEBUG宏。此外,如果你附带调试器(使用Gflags)来启动调试程序(获取windbg的副本并使用它来调试)。

当Appverifer停止您的进程时,使用.cxr命令获取上下文信息。这应该有助于指出这个问题。