2017-04-19 55 views
0

在Linux的Code :: Blocks中的一个简单的C++测试应用程序中,我有一个名为txtSelect的wxTextCtrl,它包含:'SELECT * FROM user;'= txtSelect-> GetValue(); C++,分段错误。这很奇怪

当我运行以下,崩溃!

void refreshGrid() 
{ 
wxTextCtrl *txtSelect; 
wxString sqlLine = txtSelect->GetValue(); 
} 

GDB的结果低于:

(gdb) run 
Starting program: /home/dan/Documents/wxW_Projs/wxSQLi_417/bin/Debug/wxSQLi_417 
[Thread debugging using libthread_db enabled] 
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". 

Program received signal SIGSEGV, Segmentation fault. 
0x0000000000410662 in refreshGrid() 
    at /home/dan/Documents/wxW_Projs/wxSQLi_417/wxSQLi_417Main.cpp:199 
199 wxString sqlLine = txtSelect->GetValue(); 

(gdb) bt 
#0 0x0000000000410662 in refreshGrid() 
    at /home/dan/Documents/wxW_Projs/wxSQLi_417/wxSQLi_417Main.cpp:199 
#1 0x0000000000410593 in wxSQLi_417Frame::OnButton2Click (this=0x7143c0, 
    event=...) 
    at /home/dan/Documents/wxW_Projs/wxSQLi_417/wxSQLi_417Main.cpp:183 
#2 0x00007ffff6d461fe in wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const() 
    from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0 
#3 0x00007ffff6ecc6e7 in wxEvtHandler::ProcessEventIfMatchedan(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&)() 
    from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0 
#4 0x00007ffff6eccace in wxEvtHandler::SearchDynamicEventTable(wxEvent&)() 
    from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0 
#5 0x00007ffff6eccb5f in wxEvtHandler::TryHereOnly(wxEvent&)() 
    from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0 
#6 0x00007ffff6eccc13 in wxEvtHandler::ProcessEventLocally(wxEvent&)() 
    from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0 
#7 0x00007ffff6eccc75 in wxEvtHandler::ProcessEvent(wxEvent&)() 
    from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0 
#8 0x00007ffff75f3de8 in wxWindowBase::TryAfter(wxEvent&)() 
    from /usr/lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0 
#9 0x00007ffff6ecc9e7 in wxEvtHandler::SafelyProcessEvent(wxEvent&)() 
    from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0 
---Type <return> to continue, or q <return> to quit--- 

我已经在同一台PC上的另一个应用程序,与使用相同的简单的代码和完美的作品简单的密码的演示,和其他许多人。

任何建议非常感谢。

+0

什么是'txtSelect'的价值

wxTextCtrl *txtSelect = new wxTextCtrl(); wxString sqlLine = txtSelect->GetValue(); 

:你应该创建一个对象,它的指针指向,然后用它,这样的事情?它是否指向某个有效的地方?你遵循[三,五或零的规则](http://en.cppreference.com/w/cpp/language/rule_of_three)吗?如果没有[** Minimal **,Complete和Verifiable示例](http://stackoverflow.com/help/mcve),我们确实无法帮到您。 –

+0

txt在第一句中选择值。 – Ashton

回答

0

txtSelect指向无处。如果分配失败new抛出异常std::bad_alloc

+0

所以我的代码不知道控件是否存在? – Ashton

+0

解决了它非常感谢。我无法想象我的其他示例如何在没有wxTextCtrl ..引用的情况下工作。 – Ashton

+0

使用未初始化的指针是“未定义的行为”。任何事情都可能发生,它可能会运行,它可能会崩溃。 – Sanish