Я пытаюсь узнать, используя недействительные указатели в C. Вот код, который я написал, используя GLib:gpointer cast to gint * вызывает ошибку сегментации - почему?
#include <stdio.h>
#include <gtk/gtk.h>
int
main (void)
{
GList *l = NULL;
l = g_list_append (l, GINT_TO_POINTER (1));
l = g_list_append (l, GINT_TO_POINTER (2));
l = g_list_append (l, GINT_TO_POINTER (3));
GList *l1 = g_list_nth (l, 1);
gpointer snd_element = (l1->data);
gint *digit = snd_element;
gint forty_two = 40;
forty_two = forty_two + *digit;
printf ("%d\n", forty_two);
return 0;
}
поведение я ожидаю от этой программы будет печатать 42. К сожалению, работает он вызывает ошибку сегментации , Зачем?
Почему бы вам не проверить 'l1' и' digit' для NULL перед их использованием? –
Потому что я уверен, что 'g_list_append' фактически добавит некоторые данные в l. Это означает, что l1 должен быть GList *, содержащим 2. – qiubit