- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
header 内定义的结构:
struct info{
gint mode, isSignalActivate;
gchar *filename;
GtkWidget *pwdEntry, *pwdReEntry, *mainwin, *dialog, *file_dialog;
};
extern struct info s_Info;
struct hashes{
gchar *filename;
GtkWidget *entryMD5, *entryS1, *entryS256, *entryS512, *entryWhir, *entryRMD;
GtkWidget *checkMD5, *checkS1, *checkS256, *checkS512, *checkWhir, *checkRMD;
};
extern struct hashes s_HashType;
以及程序的主要部分:
int main(int argc, char **argv){
if(!gcry_check_version(GCRYPT_MIN_VER)){
fputs("libgcrypt min version required: 1.5.0\n", stderr);
return -1;
}
gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0);
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.polcrypt",G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "startup", G_CALLBACK (startup), NULL);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
static void startup (GtkApplication *application, gpointer user_data __attribute__ ((unused)))
{
static const GActionEntry actions[] = {
{ "about", about },
{ "quit", quit }
};
GMenu *menu;
g_action_map_add_action_entries (G_ACTION_MAP (application), actions, G_N_ELEMENTS (actions), application);
menu = g_menu_new ();
g_menu_append (menu, "About", "app.about");
g_menu_append (menu, "Quit", "app.quit");
gtk_application_set_app_menu (application, G_MENU_MODEL (menu));
g_object_unref (menu);
}
static void activate (GtkApplication *app, gpointer user_data __attribute__ ((unused)))
{
GtkWidget *butHa, *grid;
struct info s_Info;
s_Info.mainwin = gtk_application_window_new(app);
gtk_window_set_application (GTK_WINDOW (s_Info.mainwin), GTK_APPLICATION (app));
gtk_window_set_position(GTK_WINDOW(s_Info.mainwin), GTK_WIN_POS_CENTER);
gtk_window_set_title(GTK_WINDOW(s_Info.mainwin), "PolCrypt");
gtk_window_set_resizable(GTK_WINDOW(s_Info.mainwin), FALSE);
gtk_container_set_border_width(GTK_CONTAINER(s_Info.mainwin), 10);
butHa = gtk_button_new_with_label("Compute Hash");
g_signal_connect(butHa, "clicked", G_CALLBACK (is_hash), &s_Info);
grid = gtk_grid_new();
gtk_container_add(GTK_CONTAINER(s_Info.mainwin), grid);
gtk_grid_set_row_homogeneous(GTK_GRID(grid), TRUE);
gtk_grid_set_column_homogeneous(GTK_GRID(grid), TRUE);
gtk_grid_set_row_spacing(GTK_GRID(grid), 5);
gtk_grid_set_column_spacing(GTK_GRID(grid), 5);
//numero colonna, numero riga, colonne da occupare, righe da occupare. Colonne e righe sono aggiunte automaticamente
gtk_grid_attach(GTK_GRID(grid), butHa, 0, 0, 5, 1);
gtk_widget_show_all(s_Info.mainwin);
}
static void is_hash(GtkWidget *ignored __attribute__ ((unused)), struct info *s_Info){
s_Info->mode = 3;
file_dialog(s_Info);
}
static void file_dialog(struct info *s_Info){
s_Info->file_dialog = gtk_file_chooser_dialog_new("Choose File", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, ("_Cancel"), GTK_RESPONSE_CANCEL, ("_Ok"), GTK_RESPONSE_ACCEPT, NULL);
if (gtk_dialog_run (GTK_DIALOG (s_Info->file_dialog)) == GTK_RESPONSE_ACCEPT){
s_Info->filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (s_Info->file_dialog));
if(s_Info->mode == 3){
select_hash_type(s_Info);
g_free (s_Info->filename);
}
}
gtk_widget_destroy (s_Info->file_dialog);
}
static void select_hash_type(struct info *s_InfoHash){
gtk_widget_hide(GTK_WIDGET(s_InfoHash->file_dialog));
struct hashes s_HashType;
GtkWidget *content_area, *grid2;
s_InfoHash->dialog = gtk_dialog_new_with_buttons ("Select Hash", NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, "_Quit", GTK_RESPONSE_CLOSE, NULL);
content_area = gtk_dialog_get_content_area (GTK_DIALOG (s_InfoHash->dialog));
s_HashType.checkMD5 = gtk_check_button_new_with_label("MD5");
s_HashType.entryMD5 = gtk_entry_new();
gtk_editable_set_editable(GTK_EDITABLE(s_HashType.entryMD5), FALSE);
gtk_widget_set_size_request(s_InfoHash->dialog, 250, 150); // richiedo una grandezza minima
grid2 = gtk_grid_new();
gtk_grid_set_row_homogeneous(GTK_GRID(grid2), TRUE); // righe stessa altezza
gtk_grid_set_column_homogeneous(GTK_GRID(grid2), TRUE); // colonne stessa larghezza
gtk_grid_set_row_spacing(GTK_GRID(grid2), 5); // spazio fra le righe
// numero colonna, numero riga, colonne da occupare, righe da occupare
gtk_grid_attach(GTK_GRID(grid2), s_HashType.checkMD5, 0, 0, 1, 1);
gtk_grid_attach(GTK_GRID(grid2), s_HashType.entryMD5, 2, 0, 6, 1);
/* Add the grid, and show everything we've added to the dialog */
gtk_container_add (GTK_CONTAINER (content_area), grid2);
gtk_widget_show_all (s_InfoHash->dialog);
s_HashType.filename = malloc(strlen(s_InfoHash->filename)+1);
strcpy(s_HashType.filename, s_InfoHash->filename);
g_signal_connect_swapped(s_HashType.checkMD5, "clicked", G_CALLBACK(compute_md5), &s_HashType);
gint result = gtk_dialog_run(GTK_DIALOG(s_InfoHash->dialog));
switch(result){
case GTK_RESPONSE_CLOSE:
gtk_widget_destroy(s_InfoHash->dialog);
break;
}
free(s_HashType.filename);
}
我的问题是,当点击s_InfoHash->dialog
的“退出”按钮时,程序出现段错误。
上面是gdb的输出。
Program received signal SIGSEGV, Segmentation fault.
0x00000000009aa4f0 in ?? ()
(gdb) where
#0 0x00000000009aa4f0 in ?? ()
#1 0x00000000008f2290 in ?? ()
#2 0x00007fffffffd330 in ?? ()
#3 0x00000000007e0480 in ?? ()
#4 0x0000000000000188 in ?? ()
#5 0x0000000040000002 in ?? ()
#6 0x00007ffff5afbba9 in g_hash_table_lookup ()
from /usr/lib64/libglib-2.0.so.0
#7 0x00007ffff5e17b7f in g_signal_emit_valist ()
from /usr/lib64/libgobject-2.0.so.0
#8 0x00007ffff5e1881a in g_signal_emit () from /usr/lib64/libgobject-2.0.so.0
#9 0x00007ffff76be454 in ?? () from /usr/lib64/libgtk-3.so.0
#10 0x00007ffff75943dc in ?? () from /usr/lib64/libgtk-3.so.0
#11 0x00007ffff7595c2a in gtk_main_do_event () from /usr/lib64/libgtk-3.so.0
#12 0x00007ffff71ac522 in ?? () from /usr/lib64/libgdk-3.so.0
#13 0x00007ffff5b0bc66 in g_main_context_dispatch ()
from /usr/lib64/libglib-2.0.so.0
#14 0x00007ffff5b0bfb8 in ?? () from /usr/lib64/libglib-2.0.so.0
#15 0x00007ffff5b0c05c in g_main_context_iteration ()
from /usr/lib64/libglib-2.0.so.0
#16 0x00007ffff60d9eec in g_application_run () from /usr/lib64/libgio-2.0.so.0
#17 0x0000000000403339 in main (argc=1, argv=0x7fffffffd878)
at src/gtk3/main-gui.c:35
这件事让我发疯,因为我找不到导致段错误的原因...(我知道 gdb 说 gtk_application_run (#17)
但这是什么意思?我如何调试和修复这个问题吗?)
我正在使用 GCC 4.8.1 和 GTK+ 3.10
最佳答案
s_Info
离开后就不复存在 activate()
,因此每当发出信号时,您都会访问无效的内存块(以前由 s_Info
占用并由 &s_Info
指向,您将其作为 user_data
传递给信号回调)
关于c - c/gtk+3 程序中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21589992/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!