thinct 2017-08-12 02:05 采纳率: 0%
浏览 1823
已结题

如何解决线程中的内存泄漏问题?


main.cpp

#include <QCoreApplication>
#include "thread.h"


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Thread* thread = new Thread();
    thread->start();

    return a.exec();
}

thread.h

#ifndef THREAD_H
#define THREAD_H

#include <QThread>
#include <QDebug>

class Thread : public QThread
{
    Q_OBJECT
public:
    explicit Thread(QObject *parent = 0)
        : QThread(parent), exitFlag(false) {}

    void run() Q_DECL_OVERRIDE {
        if (exitFlag) {
            return;
        }

        while (true) {
            Thread* t = new Thread();
            t->exitFlag = true;

            connect(t, &QThread::finished, [=](){
                t->deleteLater(); // 这里没有真正删除,因为有内存泄漏
            });

            t->start();
            // 在线程t结束之后,删除t
        }
    }

signals:
public slots:

public:
    bool exitFlag;
};


#endif // THREAD_H

怎样在解决线程 t 的内存泄漏问题?

  • 写回答

2条回答 默认 最新

  • 幻想之渔 2017-08-12 03:01
    关注

    解决这种问题的最简单方式,就是避免自己直接管理内存,不要使用指针,直接使用对象,出了whlie作用域就自己析构了。或者使用智能指针

    评论

报告相同问题?

悬赏问题

  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题