幾個小時我一直在努力學習如何使用wxListBox從的wxWidgets。我在官方tutorial上建立了我的「應用程序」,但即使我的代碼與原始代碼沒有區別,我仍無法正常工作。wxListBox - 分段故障
我想添加一個新的項目到wxListBox,而是我得到分割錯誤。這是我的代碼:
class CWindow : public wxFrame {
wxBoxSizer *hbox, *vbox;
wxListBox *list;
wxButton *btnAdd, *btnRemove;
public:
CWindow(int w = 640, int h = 480) : wxFrame(NULL, -1, wxT("Test"), wxDefaultPosition, wxSize(w, h)) {
list = new wxListBox(this, wxID_ANY, wxDefaultPosition, wxSize(w-100, h));
btnAdd = new wxButton(this, -1, wxT("Add"));
btnAdd->Connect(wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) &CWindow::OnNew);
btnRemove = new wxButton(this, -1, wxT("Remove"));
vbox = new wxBoxSizer(wxVERTICAL);
vbox->Add(btnAdd, 1, wxALL | wxEXPAND, 0);
vbox->Add(btnRemove, 1, 0, 0);
hbox = new wxBoxSizer(wxHORIZONTAL);
hbox->Add(list, 1, 0, 0);
hbox->Add(vbox, 0, 0, 0);
SetSizer(hbox);
}
void OnNew(wxCommandEvent &event) {
wxString str = wxGetTextFromUser(wxT("New item:"));
if (str.Len() > 0) list->InsertItems(1, &str, 0); //this line is suspected of causing segfault
}
};
任何想法是什麼原因導致我的問題?
PS。教程示例工作得很好,所以庫bug不是一種可能性。
編輯: GDB調試報告如下:
0x00007ffff7a8e492 in wxListBoxBase::InsertItems(unsigned int, wxString const*, unsigned int)() from /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-2.8.so.0
EDIT2:更多GDB轉儲 前:
Breakpoint 1, CWindow::OnNew (this=0x725cd0, event=...) at listbox.cpp:32
32 if (str.Len() > 0) list->InsertItems(1, &str, 0);
(gdb) print list
warning: can't find linker symbol for virtual table for `CWindow' value
$1 = (wxListBox *) 0x0
(gdb) up
#1 0x00007ffff7586d35 in wxEvtHandler::ProcessEventIfMatches(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&)()
from /usr/lib/x86_64-linux-gnu/libwx_baseu-2.8.so.0
你從哪裏得到的段錯誤? – 2012-08-07 17:57:30
@ H2CO3:只要按下* New按鈕*之後輸入文字即可。 – Robin92 2012-08-07 17:58:58
@ Robin92 - 我認爲H2CO3詢問你的調試器報告它的行號。你在預感或者調試者說的話中添加了一條評論? – Flexo 2012-08-07 18:00:28