Короче говоря: используйте NULL , когда в руководстве написано NULL , а не просто 0 !
(сЯ не могу выбрать комментарии в качестве ответа, я сам пишу ответ, отдавая должное полезным комментариям ...)
Документация GTK + гласит:
GtkWidget*
gtk_dialog_new_with_buttons (const gchar *title,
GtkWindow *parent,
GtkDialogFlags flags,
const gchar *first_button_text,
...);
title : Title of the dialog, or NULL. allow-none.
parent : Transient parent of the dialog, or NULL. allow-none.
flags : from GtkDialogFlags
first_button_text : stock ID or text to go in first button, or NULL. allow-none.
... : response ID for first button, then additional buttons, ending with NULL
Но я был ленив в ту ночь и набрал просто '0', где ожидалось NULL:
settings_dialog = GTK_DIALOG(gtk_dialog_new_with_buttons("gatotray Settings"
, NULL, 0, GTK_STOCK_CANCEL, FALSE, GTK_STOCK_SAVE, TRUE, 0));
... Не замечая, что NULL - это указатель, который в моей 64-битной системе 64-битныйwide, тогда как 0 - это 32-разрядное целое число ...
Кроме того, похоже, что в списке аргументов переменной компилятор не смог обнаружить несоответствие: код скомпилирован спокойно с -Wall.
Как Myforwik предложил и Havoc P дополнительно пояснил, используя «NULL» вместо «0», чтобы устранить проблему.Спасибо, ребята!
Для записи я выполнил тестовую компиляцию в 32-битном режиме, где NULL также 32-битный, и в этом случае не было segfault.Это все еще неверно, так как документация достаточно ясна, и NULL не равен 0, независимо от того, что когда-либо говорили члены C ++!; -)