免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3058 | 回复: 0
打印 上一主题 下一主题

用GTK+编写数据库应用程序的问题,请大家帮忙看看这段程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-04 13:58 |只看该作者 |倒序浏览
这是我写的一个测试的程序,目的是想把从数据库查询得到的信息用GTK的图形显示出来:

  1. #include <stdio.h>;
  2. #include <gtk/gtk.h>;
  3. #include <mysql.h>;

  4. /* Define global variables */

  5. MYSQL *mysql;
  6. MYSQL_RES *query_result;
  7. MYSQL_ROW row;

  8. gchar *username = "root";
  9. gchar *password = "123456";
  10. gchar *database = "station_system";
  11. gchar *hostname = "localhost";

  12. /* End the global variables Define */

  13. gint
  14. query_mysql (gchar *query)
  15. {
  16.   gint success = 0;

  17.   if (mysql_query (mysql, query) == 0)
  18.     {
  19.       query_result = mysql_store_result (mysql);
  20.       success = 1;
  21.     }

  22.   return success;
  23. }
  24.       

  25. void
  26. window_quit()
  27. {
  28.   printf ("Window quit!\n");
  29.   gtk_main_quit();
  30. }

  31. gint
  32. main (gint argc, gchar *argv[])
  33. {
  34.   gtk_set_locale ();
  35.   gtk_init (&argc, &argv);

  36.   GtkWidget *window;
  37.   GtkWidget *button;
  38.   GtkWidget *box;
  39.   GtkWidget *label;

  40.   gchar *query;

  41.   if (mysql_init (mysql) == NULL) return 1;

  42.   mysql = mysql_real_connect (mysql, hostname, username, password, database, 0, 0, 0);

  43.   if (mysql == NULL) return 1;

  44.   sprintf (query, "SELECT * FROM station WHERE province=\"广东省\"");

  45.   if (query_mysql (query) == 0) return 1;

  46.   row = mysql_fetch_row (query_result);

  47.   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  48.   label = gtk_label_new (row[0]);
  49.   button = gtk_button_new_with_label ("退出");
  50.   box = gtk_vbox_new (TRUE, 5);

  51.   gtk_window_set_title (GTK_WINDOW (window), "数据库窗口");
  52.   gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
  53.   //gtk_window_set_border_width (GTK_WINDOW (window), 10);

  54.   gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (window_quit), NULL);

  55.   gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);  
  56.   gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
  57.   gtk_container_add (GTK_CONTAINER (window), box);

  58.   gtk_widget_show (label);
  59.   gtk_widget_show (button);
  60.   gtk_widget_show (box);
  61.   gtk_widget_show (window);

  62.   gtk_main ();

  63.   mysql_free_result (query_result);
  64.   mysql_close (mysql);

  65.   return 0;
  66. }
复制代码


我用下面的参数编译成功:
gcc -o new new.c `gtk-config --cflags --libs` -I/usr/local/mysql/include/mysql -L/usr/local/mysql/lib/mysql -lmysqlclient -lz

但执行程序时出现“段错误”,然后程序退出

我使用GDB调试程序,在程序中的语句运行完查询语句,并用row数组取得一条记录后,我设置了一个断点,在这个断点后查询了row数组的值,里面的值已经是数据库里的内容了,即是说明数据库查询成功了。

之后我再一步步往下执行程序,当执行完显示主窗口的程序后,出现了预料中的窗口:我打算把数据库中查得的第一条记录的第一列字符串当作标签label = gtk_label_new (row[0]);的字符串显示出来。
此时程序运行在gtk_main ();按退出键之后,程序就收到了
Program received signal SIGSEGV, Segmentation fault.
0x4000c673 in _dl_fini () from /lib/ld-linux.so.2
的错误。

请大家帮忙看看,或者有什么建议如何寻找段错误一类程序错误的办法也说一下,在下是新手,不太懂。多谢!
程序中的图形如图

Screenshot-Test_gui.jpg (4.86 KB, 下载次数: 61)

Screenshot-Test_gui.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP