2010-06-21 71 views
1

我一直無法找到很多或任何有關這方面的信息。我有一個使用VS2005構建的項目,因此使用mscvr80.dll。我的項目也加載第三方庫,然後加載mscvrt60.dll。加載多個mscvrt **。dll版本是否存在問題?

現在我有一個奇怪的錯誤在我的程序中的程序崩潰與內存讀取違規(調試它在0xcdcdcdcd,從我的搜索描述非初始化的內存位置)。調試程序指示違規在第三方庫中的未知功能內。

我已聯繫此庫的所有者,他們不知道任何錯誤,如上所述。另外,我還有其他項目,使用VS60編譯,使用這個第三方庫,並沒有類似的錯誤。因此我想知道,使用多個通用運行時版本會有問題嗎?我記得隱約聽到一個運行時(比如在.dll中)可以分配內存的情況,然後如果另一個版本試圖釋放這個內存,那可能會導致問題。但是,我不記得我在哪裏閱讀這些內容,也無法找到關於此主題的很多信息。

任何輸入,非常感謝。

回答

1

釋放由另一版本的運行時版本分配的內存肯定會導致問題。不能保證CRT堆的實現細節在版本之間保持不變。如果您找不到任何其他解決方法,則可以嘗試針對mscvrt60.dll編譯您的應用程序。

+0

有沒有簡單的方法來編譯我的項目對V60?沒有真正嘗試將解決方案降級到Visual C++ 6.0? – DeusAduro 2010-06-22 16:39:11

+0

那麼,如果您安裝了VC6,則可以在鏈接器設置中選擇「無默認庫」選項。然後手動將其指向較舊的館藏。 – 2010-06-22 17:03:06

1

如果您看到0xcdcdcdcd,那麼您可能會混合調試運行時庫和發佈運行時庫。它們應該一起工作,但您可以嘗試僅使用發佈運行時來複制問題。

+0

謝謝,但我已經檢查了加載的庫,它肯定是調試(在調試時)和兩個版本(在發佈時)。 – DeusAduro 2010-06-22 16:38:26