2010-12-08 99 views
0

我正在構建一個應用程序並使用x264庫作爲編碼器。我使用MSys/MingW爲我的Windows系統建立了庫。該庫在調試版本下正常工作(注意調試和發佈版本都使用默認的VS2010設置)。然而,在釋放訪問衝突錯誤是在第一次調用的x264庫拋出,特別是:Visual Studio 2010中的libx264 - 發佈版本中的內存錯誤

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. 
    

任何從這個輸出收集?

再次感謝。

回答

2

參考一個類似的問題here,看看是否也可以幫助你。

編輯

後,您還希望通過AppVerifier

編輯

運行你的應用程序在我看來釋「與調試信息生成」達接通-g與優化開關切換一起並關閉任何DEBUG宏。此外,如果您使用調試器附加了調試器(使用Gflags)來啓動您的過程(獲取windbg的副本並將其用於調試)。

當Appverifer停止您的進程時,請使用.cxr命令獲取上下文信息。這應該有助於指出問題。

+0

感謝您的輸入,我已經將您的建議的結果添加到我的OP的編輯。請給出意見! – DeusAduro 2010-12-09 18:25:30