我首先要说的是,我对wxWidgets并不完全陌生,尽管我也不会认为自己有过这样的经历。
我有一个问题,我已经通过测试缩小了与wxWidgets wxBoxSizer类有关的问题。据我所知,我不认为我做错了什么,它们在应用程序运行时工作;然而,当应用程序关闭,所有东西都终止时,似乎有大约三分之一的时间它会双重释放一些东西和seg错误。我正在linux系统上编写和构建,除了这些sizers之外,似乎没有任何问题。
在我剥离HomeFrame类来搜索bug之前,我确实在它里面有更多的窗口,但是下面的代码仍然导致了double-free:
我还查看了StackOverflow和其他代码论坛,看看是否有人遇到了类似的问题,但我找不到任何东西。我在想,这可能与我将sizer指针作为成员存储在类中的方式有关?
HomeFrame.h:
#pragma once
#include <wx/frame.h>
#include <wx/sizer.h>
namespace qzrgui
{
class HomeFrame: public wxFrame
{
public:
HomeFrame();
~HomeFrame();
private:
// Sizers
wxBoxSizer* _topSizer;
wxBoxSizer* _leftSizer;
wxBoxSizer* _rightSizer;
// Functions
void _setup();
void _createWindows();
};
}HomeFrame.cpp:
#include "HomeFrame.h"
namespace qzrgui
{
HomeFrame::HomeFrame() :
wxFrame(nullptr, wxID_ANY, "Quizzer")
{
_setup();
}
HomeFrame::~HomeFrame()
{
}
void HomeFrame::_createWindows()
{
// Create sizers.
_topSizer = new wxBoxSizer(wxOrientation::wxHORIZONTAL);
_leftSizer = new wxBoxSizer(wxOrientation::wxVERTICAL);
_rightSizer = new wxBoxSizer(wxOrientation::wxVERTICAL);
}
void HomeFrame::_setup()
{
_createWindows();
}
}H (wxApp基类):
#pragma once
#include <wx/app.h>
namespace qzrgui
{
class Quizzer : public wxApp
{
public:
virtual bool OnInit();
};
};Quizzer.cpp:
#include "Quizzer.h"
wxIMPLEMENT_APP(qzrgui::Quizzer);
#include "frames/HomeFrame.h"
namespace qzrgui
{
bool Quizzer::OnInit()
{
wxFrame* frame = new HomeFrame();
frame->Show(true);
return true;
}
}发布于 2020-09-16 04:52:24
此处显示的代码中没有任何可能导致崩溃的内容。你的代码中肯定有三个内存泄漏,因为你创建了三个与任何窗口或另一个大小无关的大小,并且从不删除它们,但是,尽管是错误的,这也不会导致崩溃。
也没有足够的信息来诊断你所看到的。对于崩溃,请使用调试信息构建您的代码,并在调试器下运行它,以查看到底发生了什么。如果你在一个类Unix系统下(甚至是在最新MSVS 2019版本的MSW下),你也应该在编译时启用地址消毒器,以便在崩溃发生之前发现真正的问题。
https://stackoverflow.com/questions/63834035
复制相似问题