【发布时间】:2015-07-02 01:40:09
【问题描述】:
我正在 Windows 7 上创建 Qt 控制台应用程序。我使用的是 Qt 5.3。 目前我有错误让我感到沮丧。 已经检查了 stackoverflow,但没有任何答案可以帮助我。
我的问题是在创建 Qpixmap 时出现错误分段错误,并且我没有任何其他错误信息。
这是我的代码:
QString filePath = (directory + xmlReader.attributes().value("relativepath").toString());
QFile _file(filePath);
if (!_file.exists())
{
qWarning() << "Error : file " << filePath << " does not exist";
return false;
}
QImageReader imageReader(filePath);
QImage mainImage = imageReader.read();
if(mainImage.isNull())
{
qWarning() << "Error read image : " << filePath;
qWarning() << imageReader.errorString();
return false;
}
QPixmap mainPixmap(QPixmap::fromImage(mainImage)); // Segmentation fault here
在我的机器上生成分段错误错误的代码的最后一行。 有什么办法可以调试这个错误吗?
更新: 我在 QPixmap 上有一些代码,但它导致了同样的分段错误。
代码 1:
QString filePath = (directory + xmlReader.attributes().value("relativepath").toString());
QFile _file(filePath);
if (!_file.exists())
{
qWarning() << "Error : file " << filePath << " does not exist";
return false;
}
QImageReader imageReader(filePath);
QImage mainImage = imageReader.read();
if(mainImage.isNull())
{
qWarning() << "Error read image : " << filePath;
qWarning() << imageReader.errorString();
return false;
}
QPixmap mainPixmap;
mainPixmap = QPixmap::fromImage(mainImage); // segmentation fault here
代码 2:
QString filePath = (directory + xmlReader.attributes().value("relativepath").toString());
QFile _file(filePath);
if (!_file.exists())
{
qWarning() << "Error : file " << filePath << " does not exist";
return false;
}
QPixmap mainPixmap;
mainPixmap.load(filePath); // segmentation fault here
代码 3:
QString filePath = (directory + xmlReader.attributes().value("relativepath").toString());
QFile _file(filePath);
if (!_file.exists())
{
qWarning() << "Error : file " << filePath << " does not exist";
return false;
}
QPixmap mainPixmap;
if(_file.open(QFile::ReadOnly))
{
mainPixmap.loadFromData(_file.readAll()); //segmentation fault here
}
【问题讨论】:
-
将
QPixmap::fromImage(mainImage)移到单独的行,以便您可以尝试确定是该代码还是QPixmap构造函数。 -
嗯,奇怪,也许图像在某些方面已损坏或无效。您使用的是 Qt 库的调试版本吗?你有崩溃发生时的调用堆栈吗?
-
尝试指定文件格式
-
@sam :图像正常,如果第一个代码损坏,则 mainImage 应该为空,但不是。我检查 png 文件在使用其他应用程序打开时没有问题。调用堆栈在分段故障线处停止。 t3ft3l : 已经测试过了,但还是有同样的问题。