c++ - 当我尝试写入 wxListBox(C++、wxWidgets、CodeBlocks)时,出现 SIGSEGV、段错误

标签 c++

我正在编写的程序可以从 CodeBlocks IDE 构建和执行,但按下特定按钮(调用处理函数)会使程序崩溃。在调试器模式下,我收到此消息:

Program received signal SIGSEGV, Segmentation fault. 

它发生在行中:

m_listboxSorted->SetString(k, "some text");



我的程序的最小版本,我希望包括代码的所有重要部分,是:

class MainFrame: public wxFrame
{
public:    
wxListBox *m_listboxSorted;    
};

bool TestApp::OnInit()
{
MainFrame* OurMainFrame = new MainFrame(constructor info... );
OurMainFrame->Show( true );
return true;
}


MainFrame::MainFrame(constructor info...)
{
wxListBox * m_listboxSorted = new wxListBox(constructor info...);
}

void MainFrame::ButtonClicked(wxCommandEvent & event)
{

    static unsigned int k = 0 ;
    k++;
    m_listboxSorted->SetString(k, "some text"); // !! Problematic line !!
}


现在,在网上搜索了信号 SIGSEGV,段错误 的解决方案后,我认为问题一定出在指针中,并取消了对它的引用。但是作为一个初学者,我没有成功地应用这些信息来解决我的程序问题。

编辑:
我也尝试更改此行:

wxListBox *m_listboxSorted; 

用这个:

wxListBox *m_listboxSorted = new wxListBox;

但是这一次,当按下按钮(调用处理函数)时,我收到了这条消息:

Error Message


我的代码中要更正什么才能使程序正常运行?

最佳答案

成员 wxListBox *m_listboxSorted; 未初始化。

wxListBox * m_listboxSorted = new wxListBox(constructor info...);

在构造函数中没有为成员赋值,而是声明了一个局部指针,该指针在构造函数返回时泄漏。

m_listboxSorted->SetString(k, "some text");

然后取消引用未初始化的成员指针,导致未定义的行为。

要修复,请从构造函数的行中删除类型,使其成为赋值而不是声明。

关于c++ - 当我尝试写入 wxListBox(C++、wxWidgets、CodeBlocks)时,出现 SIGSEGV、段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25149370/

相关文章:

c++ - 从 MFC CDialog 上的子控件接收 WM_MOUSEMOVE

c++ - 二进制搜索 C++,STATUS_ACCESS_VIOLATION

c++ - Qvalidator 是否可以显示弹出窗口

c++ - 是否可以通过将一个参数设置为固定值来从 n 参数函数中获取 (n-1) 参数函数?

c++ - VS2008 SP1 : No appropriate default constructor available when pushing a pair into vector

javascript - 使用 NAN 将数组从 node.js 传递到 c++ v8

c++ - 关于 C++ 中的 sleep 命令

c++ - 将类的成员函数传递给 pthread_cleanup_push() 时没有匹配的函数调用

C++:未使用函数返回值时如何触发编译器错误?

c++ - C++ 中的继承 : define variables in parent-child classes