我正在为一个大学项目在 Windows 上使用 MSVC (Visual Studio) 在 C 中开发一个 GTK+3 应用程序。我运行了调试器,发现应用程序在从 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);
}