读书人

回调函数中疑似内存溢出GTK+,该怎么

发布时间: 2012-06-14 16:00:31 作者: rapoo

回调函数中疑似内存溢出,GTK+
我的代码又出现了一个问题,回调函数执行第二遍会让程序挂掉,且无任何提示信息。

请看我的代码,实现了一个点击按钮后,为主窗口返回所选择的日期之对话框。

回调函数中疑似内存溢出,不知道具体该如何改进,请高手点睛。

C/C++ code
void dialog_calendar (GtkEntry *widget,                      DateTrans *dtEntry){ //DateTrans是我自定义的结构体指针,分别指向一个窗口和输入框      GtkWidget *dlCalendar;   GtkWidget *vbCalendar;   GtkWidget *calendar;   GtkWidget *hbb;   gint result;   guint year;   guint month;   guint day;   char *calendardate;      dlCalendar = gtk_dialog_new_with_buttons ("Calendar",                                             GTK_WINDOW(dtEntry->window),                                             GTK_DIALOG_MODAL,                                             GTK_STOCK_CLEAR,                                             GTK_RESPONSE_NO,                                             GTK_STOCK_CANCEL,                                              GTK_RESPONSE_REJECT,                                             GTK_STOCK_OK,                                              GTK_RESPONSE_OK,                                             NULL);                                               gtk_dialog_set_has_separator (GTK_DIALOG (dlCalendar), FALSE);      vbCalendar = GTK_DIALOG (dlCalendar)->vbox;   gtk_widget_show (vbCalendar);   calendar = gtk_calendar_new ();   gtk_widget_show (calendar);   gtk_box_pack_start (GTK_BOX (vbCalendar), calendar, TRUE, TRUE, 0);      hbb = GTK_DIALOG (dlCalendar)->action_area;   gtk_widget_show (hbb);   gtk_button_box_set_layout (GTK_BUTTON_BOX (hbb), GTK_BUTTONBOX_END);      result = gtk_dialog_run(GTK_DIALOG(dlCalendar));      switch (result){       case  GTK_RESPONSE_NO:          gtk_entry_set_text(GTK_ENTRY(dtEntry->entry), "");          break;       case GTK_RESPONSE_OK:          gtk_calendar_get_date(GTK_CALENDAR(calendar),                                &year,&month,&day);          g_sprintf(calendardate,"%d-%d-%d",year,month,day);          gtk_entry_set_text(GTK_ENTRY(dtEntry->entry),                              calendardate);          break;   }   //free(calendardate);   //加了这句后,第一次执行该函数就会挂调。   gtk_widget_destroy(dlCalendar);}


[解决办法]
指针calendardate没初始化

读书人网 >UNIXLINUX

热点推荐