声明一个本地Fl_Native_File_Chooser
对象在例行退出时锤击返回堆栈。还看到失败被延迟到调用例程的父例程,也就是说,如果A()
调用方法B()
声明了对象,那么B()
可以安全返回A()
他们回来后就死了。
应用于2016年11月15日的FLTK 1.3.4-1版本,在编译时使用-std=gnu++11
在64位Lubuntu上应用。
Fl_Native_File_Chooser去年似乎在没有-std=gnu++11
的32位Lubuntu中工作,或者至少它没有崩溃而返回。但是,我们确实有一些神秘的内存损坏,所以很难说。
#include <FL/Fl_Native_File_Chooser.H>
void A()
{
Fl_Native_File_Chooser fnfc;
printf("A all finished, trying to return.\n");
}
int main( )
{
printf("Calling A.\n");
A();
printf("A returned.\n");
}
给出
Calling A.
A all finished, trying to return.
Segmentation fault (core dumped)
答案 0 :(得分:0)
解决方法:使用从堆分配的全局对象,然后保留它:
Fl_Native_File_Chooser * p_fnfc = new Fl_Native_File_Chooser;
答案 1 :(得分:0)
显然这是由Lubuntu的关键部分在我背后隐形更新造成的,造成了不兼容。
正确答案似乎是重建FLTK,即使是与之前相同的源代码,然后重新安装它。 这次我做了:
autoconf
./configure --enable-xft --enable-debug --enable-threads --enable-xdbe --with-abiversion=10304
sudo make
sudo make install
现在测试用例正常工作。