這是我今天需要調試的簡化代碼片段。VS C++編譯器應該如何處理這段代碼?
我不小心輸入是這樣的:
QImage myImage = LoadImage(path);
QImage scaledImage = myImage.scaled(100, 100);
if (condition)
{
QImage scaledImage = scaledImage.mirrored(true, true); // *** Crash ***
}
代替intendend代碼:
QImage myImage = LoadImage(path);
QImage scaledImage = myImage.scaled(100, 100);
if (condition)
{
scaledImage = scaledImage.mirrored(true, true); // *** Works fine ***
}
我本來期望的預期或將產生一個編譯器錯誤的有缺陷的代碼,要麼工作。但它只是零分割而墜毀。爲什麼?有人能告訴我編譯器對這個錯誤的觀點嗎?
哪行代碼失敗?如果我懷疑這種「如果」情況的內在原因。沒有理由爲什麼編譯器會發出警告或錯誤,因爲它是完全有效的代碼。我能想象的唯一的錯誤是'if'語句中的'QImage'刪除導致下一個作用域中'QImage'實例的資源相同。不要因爲你得到的錯誤而動,但最終可能會導致它,因爲你可能最終得到未定義的行爲,這取決於'QImage'處理資源的程度。 – 2014-11-01 23:19:17
我已經用評論「Crash」標出了這行(很容易錯過我的猜測)。 – Silicomancer 2014-11-01 23:19:57