wxWidgets wxTextCtrl在删除时崩溃
wxWidgets wxTextCtrl crash when deleting
wxTextCtrl在尝试删除或更改其值时会导致内存分配问题。以下是一些代码见解:
wxTextCtrl* s = new wxTextCtrl(...);
s->SetValue("abc");//crash
delete s//crash
它的所有成员都是const的。以下是VisualStudio在崩溃时的说明:
An unhandled exception of type 'System.AccessViolationException'
occurred in Unknown Module.
Additional information: Attempted to read or write protected memory.
This is often an indication that other memory is corrupt.
即使我尝试wxWidgets默认销毁:
parent->DestroyChildren(); //ofc the parent is wxPane passed in constructor of s
任何帮助都将不胜感激。
以下是调用wxTextCtrl:的仅有函数中的一些实际代码
void AddButton::OnAction(wxSize* frame){
if ( !DoAction ){
if ( ! thy )
{
thy = new wxPanel
(mParent, -1,
wxPoint(0, 0),
wxSize(PanelWidth, mParent->GetSize().GetHeight()),
wxBORDER_NONE | wxFRAME_FLOAT_ON_PARENT );
thy->SetBackgroundColour(wxColor(30,30,30));
thy->Show();
if ( ! AddPanelDialog ){
//AddPanelDialog = (new _Text
//(this, thy, "add link...", wxPoint(1, 30), wxSize(PanelWidth - 30, 20),
//wxBORDER_NONE | wxTE_PROCESS_ENTER ));
wxTextCtrl* s = new wxTextCtrl(thy, -1, "", wxPoint(1, 30), wxSize(PanelWidth - 30, 20),
wxBORDER_NONE | wxTE_PROCESS_ENTER );
s->Connect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(_Text::OnEnter));
s->Show();
}
if ( !ConfirmPanel ){
ConfirmPanel = new wxPanel
(thy, -1, wxPoint(PanelWidth - 28, 30), wxSize(27, 20),
wxBORDER_NONE | wxFRAME_FLOAT_ON_PARENT );
ConfirmPanel->SetBackgroundColour(wxColor(38, 145, 232));
ConfirmPanel->Show();
}
}
else {
thy->Show();
}
gui* rmd = (gui*)mParent;
rmd->LeftPanelActivate();
rmd->SetNewPositions(rmd->GetParent()->GetSize());
Button::Update();
helper::SendRedrawEvent(mParent);
DoAction = true; // indicates action activated
}
else{
thy->Hide();
gui* rmd = (gui*)mParent;
rmd->LeftPanelActivate(false);
rmd->SetNewPositions(rmd->GetParent()->GetSize());
Button::Update();
helper::SendRedrawEvent(mParent);
DoAction = false; // indicates action activated
}
}
和调用SetValue((的函数
void AddButton::OnEnter(wxCommandEvent& event)//enter button handler
{
wxTextCtrl* _t = (wxTextCtrl*)this;
_Clear();
*_t<<"sup";
}
我认为您对Connect()
的理解有问题。如果使用它连接到另一个对象的方法,则必须传递指向该对象的指针作为最后一个参数(在文档中称为eventSink
(。几乎可以肯定,您的方法是在错误的对象指针上调用的。
你绝对不应该像在OnEnter()
中那样投this
。
你确定你真的需要删除wxTextCtrl吗?如果将此文本控件放入sizer中,那么sizer将对其负责,并在需要时销毁它。您可能需要将文本控件与sizer分离,然后将其删除。此外,您应该使用Destroy((方法而不是delete
运算符。这在文档中有明确的解释。
关于SetValue()
呼叫崩溃:您尝试过使用wxT("abc")
吗?此外,您使用的是什么版本的wxWidgets、操作系统和编译器?wxWidgets根本没有遇到过这样的问题。也许你可以发布一些有意义的代码来帮助识别问题?
相关文章:
- 在虚幻引擎中删除NXOpen对象时崩溃
- 无法删除EXE崩溃后,即使进程未显示在任务管理器中
- 删除SDL_PollEvent时程序崩溃
- 删除数组 c++ 崩溃问题
- 在C++中删除指针数组时析构函数崩溃
- 使用自定义上下文菜单删除 QTreeView 项崩溃
- 如果我从single_digits[*num - '0']]中删除'0',为什么这个程序会崩溃)
- 删除动态字符串时程序崩溃
- 当删除上下文属性中的QLIST对象时,QT QML应用程序崩溃
- 删除关键字导致程序崩溃
- C++将自删除推回矢量时崩溃
- 为什么要删除指针崩溃wchar_t?
- 试图删除最后一个std ::向量元素时,程序会崩溃
- 当我尝试删除指针时,我的程序崩溃
- 当我递增指针然后将其删除时,为什么我的程序会崩溃
- qquickvew删除导致应用程序崩溃
- C++:指向对象的指针数组 - 删除元素时程序崩溃>
- c 从范围删除对象的操作员导致崩溃dealloceLoceLoceLoceLoceLoceLoceLoceLoceL
- libpng 的C++抽象导致 malloc 崩溃 -- 删除 2D 数组"Jagged"
- 崩溃删除[]初始化的字符串