User interface GTK&x2B;3应用程序在调试模式下崩溃,但在发布模式下运行正常?

User interface GTK&x2B;3应用程序在调试模式下崩溃,但在发布模式下运行正常?,user-interface,visual-c++,runtime-error,gtk3,libffi,User Interface,Visual C++,Runtime Error,Gtk3,Libffi,我正在为一个大学项目在windows上使用MSVC(Visual Studio)开发一个C语言的GTK+3应用程序。 我运行了调试器,发现应用程序在从libffi调用返回时崩溃。堆栈已损坏,因此程序的返回地址是垃圾 问题是,它在发布模式下运行良好,可能是由于优化,但在调试模式下崩溃。原因可能是什么 我不知道如何解决这个问题。。。任何帮助都将不胜感激 以下是导致错误的代码部分: ffi_call_win64 (stack, frame, closure); } // Error here Ex

我正在为一个大学项目在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);
}
#包括
激活时静态无效(GTK应用程序*应用程序){
//创建一个新窗口
GtkWidget*窗口=gtk_应用程序_窗口_新(应用程序);
//创建一个新按钮
GtkWidget*button=gtk_button_new_,带_标签(“你好,世界!”);
//单击按钮时,销毁作为参数传递的窗口
g_信号连接交换(按钮,“点击”,g_回调(gtk_小部件销毁),窗口);
gtk_容器添加(gtk_容器(窗口),按钮);
gtk_小部件_全部显示(窗口);
}
int main(int argc,char*argv[]){
//创建一个新的应用程序
GtkApplication*app=gtk_application_new(“com.example.GtkApplication”,
G_应用程序_标志_无);
g_信号连接(应用程序,“激活”,g_回调(启动时),空);
返回g_应用程序运行(g_应用程序(应用程序)、argc、argv);
}

尝试创建MCVE并再现问题。检查某些变量是否未初始化。还可以尝试动态代码分析。嘿,谢谢你的回复!假设MCVE意味着重现问题所需的最小代码。。。我从gtk.org复制了Hello World gtk示例程序,崩溃甚至在窗口出现之前就发生了。问题是我不熟悉libffi的低级实现,因此我无法确定变量是否已初始化?你能发布你的mcve吗?当然。。我已经编辑了这个问题,把它也包括进去了。。。这段代码看起来不错(在linux上不会崩溃),但它不包含任何ffi调用。它也会崩溃吗?