我是wxWidgets的新手,我正在尝试使用wxFileDialog,但在使用它一段时间之后我发现使用它有问题。
致电:
ShowModal()// For:wxFileDialog
我的程序增长~8000K,每次下一次调用后它都会增长~1000K。
下面是我用来测试这个问题的代码,我假设我做了一些非常错误的事情,并且不知道我到处找了什么修复并且似乎找不到任何东西。
我假设在某处分配了内存,但从未取消分配...
任何可以帮助解决这个问题的人都会非常感激!
#include <wx\wxprec.h>
class MyApp : public wxApp {
public:
virtual bool OnInit();
};
class My_Frame : public wxFrame {
public:
My_Frame() : wxFrame(NULL, wxID_ANY, _T("Test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE & ~wxRESIZE_BORDER & ~wxMAXIMIZE_BOX) {
wxButton* newButton = new wxButton(this, LOAD_FILE_BROWSER_ID, "PRESS ME");
}
void on_button_press(wxCommandEvent& event);
enum ButtonID {
LOAD_FILE_BROWSER_ID = wxID_HIGHEST + 1
};
DECLARE_EVENT_TABLE()
};
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit() {
My_Frame* newFrame = new My_Frame;
newFrame->Show(true);
return true;
}
BEGIN_EVENT_TABLE(My_Frame, wxFrame)
EVT_BUTTON(My_Frame::ButtonID::LOAD_FILE_BROWSER_ID, My_Frame::on_button_press)
END_EVENT_TABLE()
void My_Frame::on_button_press(wxCommandEvent& WXUNUSED(event)){
wxFileDialog FileLoad(this, "Load", "", "", "", wxFD_OPEN | wxFD_FILE_MUST_EXIST);
FileLoad.ShowModal();
}
int main(int argc, char* argv[]){
wxEntryStart(argc, argv);
wxTheApp->CallOnInit();
wxTheApp->OnRun();
}
答案 0 :(得分:0)
打开一个文件对话框会在Windows下加载一些DLL(你必须在那里测试它),其中许多是第三方(shell扩展等)并且可能有内存泄漏。不幸的是,如果确实如此,除了找到DLL泄漏内存并停止使用它之外,你无能为力。要确定这不是一个wxWidgets问题,你可以直接使用打开文件对话框编写或在线查找一个简单的Win32应用程序,并检查它是否表现出相同的症状 - 它确实应该。