这是我今天需要调试的简化代码片段。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