2012-06-14 3 views
0

C/gtk + (v 2.x)로 작성된 GUI 응용 프로그램이 있습니다. 주 창의 메뉴 항목을 클릭하면 다음 기능이 호출되고 대화 상자가 표시됩니다.GUI 응용 프로그램에서 할당 된 메모리를 해제하는 방법은 무엇입니까?

dialog_ui * create_dialog() 
{ 
    dlg = malloc (sizeof(dialog_ui)); 
    dlg->window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
    ... 
    gtk_widget_show_all (dlg->window); 
    return dlg; 
} 

이이 헤더 파일에 dlg 변수 인 dialog_ui structue

typedef struct _dialog_ui 
{ 
    GtkWidget * window; 
    ... 
} dialog_ui; 

입니다.

dialog_ui * dlg; 

내 문제는 내가 create_dialog 함수의 malloc를 호출하고있어,이다. 그러나 GUI가 이벤트 중심이기 때문에 free으로 어디서 전화 할 수 있는지 알 수 없습니다. destroy-event에 대해 생각했지만 올바른 방법을 알고 싶습니다. 어떤 아이디어 ..?

답변

1

종종 gtk_widget_show() 대신 gtk_dialog_run()을 사용하여 호출하는 모달 대화 상자가 있습니다. gtk_dialog_run() 함수는 사용자가 대화 상자를 닫을 때까지 반환하지 않고 사용자가 예, 확인, 취소, 닫기 등을 클릭했는지 여부를 결정하는 데 사용할 수있는 응답을 반환합니다. GtkDialog API documentation에있는 예를 참조하십시오.

자신의 응용 프로그램 코드가 GtkWindow 일 뿐이므로 기본 응용 프로그램 코드는 의 "destroy" 신호에 연결하고 거기에서 위젯을 참조하는 구조체를 해제 할 수 있습니다.

보조 노트로 malloc을 사용하는 대신 GLib이 제공하는 Memory Allocation 함수를 살펴볼 수 있습니다.

0

대화 상자가 더 이상 필요하지 않을 때 더 이상 액세스하지 않을 때 (예 : 닫을 때) 할당 된 메모리를 확보 할 수 있습니다. 파괴 사건에서 그것을하는 것은 좋은 장소입니다.

관련 문제