Проблема со структурой, строка anf gtkwidget - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь создать диапораму в c с помощью gtk. У меня есть кнопка «предыдущая», которая показывает предыдущее изображение. Поэтому я подключаю свою кнопку к функции и передаю ее структуре. Но когда я пытаюсь напечатать элемент моего массива, у меня появляются странные символы, и я не знаю почему. Кроме того, я получил это предупреждение для моего образа gtk:

GLib-GObject-WARNING **: 19:12:16.442: invalid uninstantiatable type '(null)' in cast to 'GtkImage'
Gtk-CRITICAL **: 19:12:16.442: IA__gtk_image_set_from_file: assertion 'GTK_IS_IMAGE (image)' failed

Вот моя структура:

struct ButtonsArg {
    GtkWidget *image;
    char *img[];
};

Вот мой код для инициализации моей структуры в основном:

GtkWidget *image = gtk_image_new();

char *images[nbImages];
//I get the name of all my image in this function
getImageList(images);

//This print work fine
printf("%s\n", images[0]);


struct ButtonsArg * arg;

arg = malloc(sizeof(struct ButtonsArg) + nbImages*sizeof(char*));

for(int i = 0; i < nbImages; i++) {
    arg->img[i] = malloc(strlen(images[i])+1);
    strcpy(arg->img[i], images[i]);
}

arg->image = image;

g_signal_connect(precedent, "clicked", G_CALLBACK(event_precedent), &arg);

Вот функция, где возникают проблемы:

static void event_previous(GtkWidget *widget, gpointer data) {
    g_print ("previous\n");
    struct ButtonsArg *arg = data;

    //Print weird charac
    for(int i = 0; i < nbImages; i++) {
        printf("%s\n", arg->img[i]);
    }

    GtkWidget *image = arg->image;

    if(currentImage == 0) {
        currentImage = nbImages - 1;
         gtk_image_set_from_file (GTK_IMAGE (arg->image), arg->img[1]);
    } else {
        currentImage--;
        gtk_image_set_from_file (GTK_IMAGE (arg->image), arg->img[2]);
    }
}

Если у вас есть какой-либо совет, помощь или ссылка, которая может помочь, спасибо, что поделились ею со мной.

1 Ответ

0 голосов
/ 30 марта 2020

Можете ли вы показать часть кода, где вы пытаетесь изменить переменную GtkImage? Похоже, программа пыталась установить нулевое значение в переменную типа GtkImage. По этой причине любое выражение с этой переменной (например, image-> value) может вызвать ошибку сегментации.

UPD: ОК. Вижу. Вам следует проверить arg-структуру. Я думаю, что некоторые атрибуты этой структуры могут иметь нулевое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...