2011-12-02 98 views
0

我有一個類駐留在一個DLL和一個使用該DLL的EXE。埃克只是在dll中創建類並調用它的方法。在發佈模式下編譯時一切正常。但是,如果我編譯與MDD標誌調試模式下的一切(包括OpenCV庫我的類使用),然後我得到:調試DLL中的C++內存分配後崩潰

Debug Assertion Failed! _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 

所有涉及到的二進制文件正在使用運行時動態鏈接庫的版本完全相同,一切都被編譯與VS 2008在同一臺計算機上。據我瞭解(基於我的調試),問題如下:

我創建我的類的實例使用exe中的「新」運算符(主下)那麼只要我的類的構造函數做了一些需要內存分配的事情,類的本身的內存位置就會被覆蓋,就好像dll和exe都使用相同的內存空間,但不同的「next available positio n分配「偏移量」。因此,dll沒有看到已經在exe文件中完成了一個分配,因此覆蓋了我的類所在的內存區域。顯然這會導致內存問題。

任何想法爲什麼會發生這種情況?我盡力解釋這種情況,但如果需要,我當然可以提供更多信息。

在此先感謝。

+0

看起來像內存泄漏給我。你在堆上覆蓋了一些東西。 – 2011-12-02 07:48:37

+0

我不這麼認爲。我一直在我的應用程序中使用該類很長一段時間,並始終能夠無任何問題地進行調試。該問題必須對.dll執行某些操作,因爲它僅在將類導出到.dll時纔會發生,然後嘗試使用該.dll調試應用程序。 – sct

回答

0

我發現這個問題是由於我的錯誤而從類的頭文件中丟失的2個公共成員變量。當我添加它們時,問題就解決了。

0

請檢查那些調試宏指令,這很關鍵。像ASSERT ...

它們在調試模式下編譯。

當您在發佈模式下編譯代碼時,調試MACRO被禁用。