2016-11-25 20 views
-1

這不是關於我的代碼的具體問題,而是更高層次的問題。釋放引發聲明但不調試 - 一定是編譯器錯誤?

我有C++代碼,在發佈和調試模式編譯(既使用斷言接通)

有一個在用於檢查調試等庫中沒有代碼(通過prerocsssor定義或宏)。

在調試模式下運行不會導致任何斷言。在Release或RelWithDebInfo中運行每次都會引發斷言。

這是否意味着MSVC編譯器/優化器中存在一個錯誤?另外,更一般地說:Release和Debug之間的程序行爲差異總是構成編譯器中的錯誤。

注意:clang運行此代碼時沒有在Release和Debug中拋出斷言。

+0

沒有一個例子很難說,它可能是一個有關未初始化變量的問題。或完全是其他的東西。您是否正在使用Visual Studio中設置的最高警告級別編譯代碼? –

+1

如果您在調試器中運行RelWithDebInfo(可能因爲您有調試信息),那麼斷言在哪裏發生?使用某些編譯器或編譯配置可以使某些工作有效,但在其他編譯器或編譯配置中使用某些工作通常更多的是指示您執行導致*未定義行爲的東西,而不是編譯器或庫中的錯誤。 –

回答

1

這種東西幾乎從來都不是編譯器的bug。如果您的代碼因爲指針丟失而覆蓋數據,那麼當您使用不同的選項進行編譯時,它可以覆蓋不同的數據,並且結果大不相同。

相關問題