无法找出双重自由或腐败(fasttop)错误
Cannot figure out double free or corruption (fasttop) error
下面的方法在运行时生成一个双自由或损坏(fasttop)错误(在第一行)。它是随机发生的,也就是说,它可能发生在程序运行的第1秒或第35秒。
QSharedPointer<QPixmap> Utils::loadImg(QString fileName)
{
QPixmap *pixmap = new QPixmap(fileName);
QSharedPointer<QPixmap> qspPixmap(pixmap);
return qspPixmap;
}
这是一个静态方法,我调用来获得一个像素图的指针(实际上使用Qt提供的智能指针)。获得智能指针后,我将其存储到一个映射结构中以供以后使用。当我从map结构中删除条目时,它应该释放内存,看起来确实如此。注意,loadmg (QString)方法是由另一个在自己的线程上运行的方法调用的(使用Qt提供的QtConcurrent和QFuture)。
我实在想不出问题是什么。调试器将第一行显示为有问题的行。提前感谢您的帮助
考虑到像素图是隐式共享的,这个方法没有意义。按值传递它们!你还应该通过const引用传递字符串参数,除非你打算在你的方法中修改它们。
你完全可以有一个QMap<QString, QPixmap>
,把所有东西都当作值。
如果你在主线程之外的任何线程中调用这个方法,你调用了未定义的行为-你应该使用QImage
来代替。
你的方法应该如下所示:
QPixmap Utils::loadImg(const QString & fileName)
{
Q_ASSERT(QThread::currentThread() == qApp->thread());
return QPixmap{fileName};
}
如果你打算在任意线程中调用它,你应该:
QImage Utils::loadImg(const QString & fileName)
{
return QImage{fileName};
}
当然,在这两种情况下,该方法都是微不足道的,所以没有必要使用它,除了验证您正在正确的线程中创建像素图。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- 逻辑'double free or corruption (fasttop)'错误
- emplace_back和push_back给出错误'double free or corruption (fasttop)'尽管定义了复制和移动构造函数
- c++双自由或损坏(fasttop)--不确定错误在哪里
- 我在C++中使用删除运算符时遇到问题。我在运行时不断收到"double free or corruption (fasttop)"错误
- 无法找出双重自由或腐败(fasttop)错误
- 错误:双重自由或损坏(fasttop) -由析构函数引起,但如何