0

我正在使用 CodeLite 创建一个 Fltk 项目。一切似乎都很好,但是当我按 F5 进行调试时,它总是因“程序接收到信号 SIGSEGV”提示而崩溃。这是调用堆栈:

0 0x00401c66 Fl_Widget::Fl_Widget(int, int, int, int, char const*)
1 0x0040a6b1 Fl_Group::Fl_Group(int, int, int, int, char const*)
2 0x004097bf Fl_Window::Fl_Window(int, int, char常量*) 3 0x00401415 主要

我确信代码没有问题,因为我通过使用 CodeBlocks 成功完成了它;

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
using namespace std;

//--------------------------------------------
void but_cb( Fl_Widget* o, void*  ) {
Fl_Button* b=(Fl_Button*)o;
b->label("Good job"); //redraw not necessary

b->resize(10,150,140,30); //redraw needed
b->redraw();
}

//--------------------------------------------  
int main() {
Fl_Window win( 300,200,"Testing" );
win.begin();
   Fl_Button but( 10, 150, 70, 30, "Click me" );
win.end();
but.callback( but_cb );
win.show();
return Fl::run();
}

构建日志,也许有用:

C:\windows\system32\cmd.exe /c "mingw32-make.exe -j 4 -e -f "CL_TESL_wsp.mk"" ----------构建项目:[HelloFltk - 调试]- ---------" mingw32-make.exe[1]: 进入目录G:/CPP/CL_TESL/HelloFltk' g++ -o ./Debug/HelloFltk @"HelloFltk.txt" -L. -LG:/MinGW-4.7.1/lib/ -LG:/FLTK/fltk- 1.3.2/lib/ -LG:/FLTK/fltk-1.3.2/ -LG:/MinGW-4.7.1/lib/ -lgdi32 -lfltk -lfltk_forms -lfltk_gl -lfltk_images -lfltk_z -lgdi32 -lole32 -luuid -luser32 -lcomctl32 mingw32-make.exe[1]: Leaving directoryG:/CPP/CL_TESL/HelloFltk' 0 个错误,0 个警告

新情况!!今天我将我的 CodeBlocks 更新到最新版本,它出现了同样的问题。我认为它与 MinGW 的版本有关......我使用新版本的 MinGW 重新制作 FLTK,也不起作用......所以我必须将 CodeLite 的 MinGW 路径更改为旧路径,它可以工作...为什么我不能使用最新版本?

4

1 回答 1

0

我怀疑您尝试遵循本教程:

http://www3.telus.net/public/robark/#labels

在该链接的底部,它解释了为什么您尝试的示例不好:

这个程序有一个大问题。点击按钮。然后尝试通过移动窗口或最小化/恢复来强制重绘。注意标签显示的垃圾!FLTK 试图推迟一个不再存在的指针。不好

我自己没有尝试过,同样的教程提供了一个修复:

如果我们将回调函数中的行从 o->label(newcap);

o->copy_label(newcap);

祝你好运,伊兰

于 2013-04-30T19:20:29.143 回答