16,818
社区成员




#include <QtCore>
#include <QtGui>
int main(int argc, char *argv[])
{
QString const prefix = "C:/Qt/crash_pictures/";
QStringList name(QStringList() << "rgb32-111110.bmp" << "rgb32bf.bmp" << "rgba32.bmp"<< "badheadersize.bmp"<<"badpalettesize.bmp");
for(int i = 0; i != name.size(); ++i){
qDebug() << name[i];
QImage read(prefix + name[i]); //crash at here
qDebug() << read.isNull(); //can't reach this line
qDebug() << read.format();
}
return 0;
}
for(auto *p = begin; p != end; ++p)
会认为这个loop会陷入死循环,我在msdn已经被人问过两次了
来讲解一下loop的基本知识
for(int i = 0; i != 5; ++i)
int i = 0; //初始条件
i != 5; //终止条件
++i//没达到终止条件时每一个循环会对i做的事情
所以这个loop代表的是i从0开始计数,当i不等于5的时候,会不停的加1
所以i的变化是0, 1, 2, 3, 4----出现5的时候就会跳出loop
因为i == 5,达到了终止条件
for(int i = 0; i < 5; ++i)
这个loop代表的是i从0开始计数,当i小于5的时候,会不停的加1
所以i的变化是0, 1, 2, 3, 4----出现5的时候就会跳出loop
因为i已经不再小于5
会崩溃的是这三张
"rgb32-111110.bmp","rgb32bf.bmp","rgba32.bmp"
其他图可以不用试
int main(int argc, char *argv[])
{
QString const prefix = "C:/Qt/crash_pictures/";
QStringList name(QStringList() << "rgb32-111110.bmp" << "rgb32bf.bmp" << "rgba32.bmp");
QImage img;
try{
for(int i = 0; i != name.size(); ++i){
qDebug() << name[i];
qDebug() << img.load(prefix + name[i]);
}
}catch(...){
qDebug() << "weird bug";
}
return 0;
}
#include <QtCore>
#include <QtGui>
int main(int argc, char *argv[])
{
QString const prefix = "C:/Qt/crash_pictures/";
QStringList name(QStringList() << "rgb32-111110.bmp" << "rgb32bf.bmp" << "rgba32.bmp");
for(int i = 0; i != name.size(); ++i){
qDebug() << name[i];
QImage read(prefix + name[i]);
qDebug() << read.isNull();
qDebug() << read.format();
}
return 0;
}