2014-07-25 105 views
0

我有msvc 10.0構建的庫(動態,帶隱式鏈接),導出類和STL容器。它構建爲發佈版和調試版(兩個版本)。這不是我的,所以我沒有源代碼。我有一個簡單的應用程序,從這個庫調用方法(也由msvc 10.0構建,所以,我猜,STL和編譯器版本的兼容性不應該存在問題)。調試vs發佈庫版本與調試/發佈客戶端應用程序具有不同的行爲

  • 如果構建爲調試鏈接的應用程序調試庫的版本 - 一切正常,假設。
  • 如果應用程序構建爲發佈鏈接發佈版本的庫 - 一切正常,假設。
  • 如果應用程序內置的調試鏈接庫的發行版本 - 似乎有庫邏輯中的錯誤,它會拋出異常length_error文本「矢量過長」

爲什麼能出現這種情況,如果它完美工作沒有任何變化,只是如果應用程序有不同的版本/調試設置?

我沒有改變任何默認的IDE設置,選擇「放行」 /「調試」。

+1

混合構建類型從來就不是一個好主意。 –

+0

是的,但有時我們沒有調試庫版本。但我們必須調試我們的應用程序,並將其構建爲「調試」。我從未遇到過這樣的問題。如果你可以建議哪裏可以解決問題,那會很好。 – Arkady

回答

0

調試和重新類和STL容器的租賃版本可以有不同的內存佈局,包括不同的變量。如果要求處理其他佈局,假定一個佈局編譯的代碼將失敗。

+0

爲什麼他們有不同的內存佈局,如果他們都使用相同的編譯器和相同的STL實現? – Arkady

+0

正如我所瞭解的調試 - 這就像額外的佈局/內存管理器,每次分配時都會生成一些關於分配內存的調試信息。並創建方法來訪問分配的內存,但不會更改其包裝的任何方法的邏輯。 – Arkady