FLTK 1.3.4 Fl_Native_File_Chooser破坏了64位Lubuntu上的返回堆栈

时间:2017-05-19 19:16:19

标签: segmentation-fault filechooser fltk

声明一个本地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)

2 个答案:

答案 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

现在测试用例正常工作。