C++ 正常块后检测到Qt堆损坏

C++ 正常块后检测到Qt堆损坏,c++,qt,heap,C++,Qt,Heap,我有以下情况: 检查TreeWidget收割台: class InspectionTreeWidget : public QTreeWidget { Q_OBJECT public: explicit InspectionTreeWidget(QWidget *parent = 0); private: QVBoxLayout *layout_sourcesettings; QFrame *frame_sourcesettings; ... 检查Tr

我有以下情况:

检查TreeWidget收割台:

class InspectionTreeWidget : public QTreeWidget
{
    Q_OBJECT
public:
    explicit InspectionTreeWidget(QWidget *parent = 0);



private:

    QVBoxLayout *layout_sourcesettings;

    QFrame *frame_sourcesettings;

...
检查TreeWidget的实施:

InspectionTreeWidget::InspectionTreeWidget(QWidget *parent) :
    QTreeWidget(parent)
{
QVBoxLayout *layout_sourcesettings;
     layout_sourcesettings= new QVBoxLayout();

    frame_sourcesettings=new QFrame(this);
    frame_sourcesettings->setLayout(layout_sourcesettings);

...
}
一切正常,但当我关闭应用程序时,出现错误“正常块后检测到堆损坏”

我做错了什么

谢谢

编辑(已解决):

我不知道这是否是一个bug,但问题的发生是因为构建过程中的一个序列:

首先,我有这个代码:

InspectionTreeWidget::InspectionTreeWidget(QWidget *parent) :
        QTreeWidget(parent)
    {

        QVBoxLayout* layout_sourcesettings= new QVBoxLayout();

        frame_sourcesettings=new QFrame(this);
        frame_sourcesettings->setLayout(layout_sourcesettings);

    ...
    }
我做了一次重建,一切正常

然后我将layout_sourcesettings的声明移动到header,然后我构建了项目,没有出现编译错误,但是当我关闭应用程序时,我得到了堆损坏。但是在重建之后我不再得到堆损坏

所以我现在的问题是:这是一个与Qt相关的bug,还是每次我将本地声明移动到头文件时,我都必须进行重建?
谢谢

您是否使用为编译器编译的Qt?使用不同编译器构建的Qt是不安全的。这样做会创建两个独立的堆,如果在一个堆中分配内存并尝试在一秒钟内释放内存,则会损坏堆。崩溃可能不会发生在导致损坏的删除上,它可能发生在其他一些分配或删除上,因此这很难调试。由于这个原因,官方发布的版本有几个Visual Studio版本的二进制文件。我仍然认为问题在于使用了不同的编译器。这是使用QuestStudio错误版本时使用的Qt的随机堆损坏行为。我理解,但是我使用Qt5.3.1用于Windows 32位(VS 2013,OpenGL),并且我安装了Visual Studio 2013(使用Visual C++编译器12)您的路径中是否安装了不同版本的Qt?我使用了在线安装程序,为visual studio 2010和2013安装了两个版本,因此在C:\Qt\5.3\n中,我有两个文件夹:msvc2010\u opengl和msvc2013\u opengl。安装2个版本是否有问题?谢谢