FLTK 1.3.4 Fl_Native_File_Chooser портит стек возврата на 64-битной Lubuntu

Объявление локального объекта Fl_Native_File_Chooser забивает стек возврата при обычном выходе. Также видели, как сбой откладывался на родительскую подпрограмму, вызывающую эту подпрограмму, то есть если A() вызывает метод B(), объявляет объект, то B() может безопасно вернуться, но A() умирает при его возврате.

Применяется 17 мая 2016 года с выпуском FLTK 1.3.4-1 15 ноября 2016 года в 64-разрядной версии Lubuntu с использованием -std=gnu++11 при компиляции.

Fl_Native_File_Chooser, похоже, работал в прошлом году в 32-разрядной версии Lubuntu без -std=gnu++11 или, по крайней мере, возвращался без сбоев. Тем не менее, у нас было какое-то загадочное повреждение памяти, так что трудно сказать.

#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 ответа

Обходной путь: используйте глобальный объект, выделенный из кучи, затем сохраните его:

Fl_Native_File_Chooser * p_fnfc = new Fl_Native_File_Chooser;

Очевидно, это было вызвано тем, что ключевые части Lubuntu незаметно обновляются за моей спиной, создавая несовместимость.

Правильный ответ, кажется, перестроить FLTK, даже из того же исходного кода, что и раньше, а затем переустановить его. На этот раз я сделал:

autoconf
./configure --enable-xft --enable-debug --enable-threads --enable-xdbe --with-abiversion=10304
sudo make
sudo make install

и теперь контрольный пример работает.

Другие вопросы по тегам