GTK + 3 Приложение вылетает в режиме отладки, но нормально работает в режиме выпуска? - PullRequest
1 голос
/ 18 марта 2020

Я разрабатываю приложение GTK + 3 в C с использованием MSV C (Visual Studio) в windows для проекта колледжа. Я запустил отладчик и обнаружил, что приложение падает при возврате из вызова libffi. Стек поврежден и, следовательно, адрес возврата программы является мусором.

Дело в том, что он работает нормально в режиме выпуска, возможно, из-за оптимизации, но падает в режиме отладки. В чем может быть причина?

Я понятия не имею, как решить проблему ... Любая помощь будет оценена.

Вот часть кода, которая вызывает ошибку:

  ffi_call_win64 (stack, frame, closure);
} // Error here
Exception thrown: read access violation.
pn was 0xFFFFFFFFFFFFFFFB.

MCVE

#include <gtk/gtk.h>

static void on_activate(GtkApplication* app) {
    // Create a new window
    GtkWidget* window = gtk_application_window_new(app);
    // Create a new button
    GtkWidget* button = gtk_button_new_with_label("Hello, World!");
    // When the button is clicked, destroy the window passed as an argument
    g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_widget_destroy), window);
    gtk_container_add(GTK_CONTAINER(window), button);
    gtk_widget_show_all(window);
}

int main(int argc, char* argv[]) {
    // Create a new application
    GtkApplication* app = gtk_application_new("com.example.GtkApplication",
        G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "activate", G_CALLBACK(on_activate), NULL);
    return g_application_run(G_APPLICATION(app), argc, argv);
}
...