2011-01-09 21 views
0

に関連し、私が構造次き:[C]構造の動的割り当てメモリ、GTK

typedef struct 
{ 
GtkWidget* PoziomaLinijka; 
GtkWidget* PionowaLinijka; 
GtkWidget* Label1; 
GtkWidget* Label2; 
gint x,y; 
} StrukturaDrawing; 

を、後に、私はその構造を使用する機能を持っていると私にはないので、私は、ヒープ上に割り当てる必要がありますグローバル変数を使いたい。だから私はこのようにそれを割り当てる:

StrukturaDrawing* Wsk; 
    Wsk = (StrukturaDrawing*)malloc(sizeof(StrukturaDrawing)); 
    if (!Wsk) 
    { 
printf("Error\n"); 
    } 

をそして、それがエラーを返していませんし、また他の機能と素晴らしい作品、それは私がそのメモリを解放したかった私は、それはそう最終的に動作するように望んでいたように動作し、ここでの問題ですデバッグモードでは、コンパイル時に、

が発生します。GTK.exeの0x102d12b4でファーストチャンス例外が発生します。0xC0000005:0xfffffffcというアクセス違反です。 GTK.exeの0x102d12b4で未処理の例外が発生しました。0xC0000005:0xfffffffcという場所を読み取っているアクセス違反。

私はそのように、私の関数にコールバックを接続します。空きメモリと密接なプログラムに想定される

g_signal_connect(G_OBJECT(Okno), "destroy", G_CALLBACK(Wyjscie), Wsk);

が機能:

void Wyjscie(GtkWindow* window, GdkEvent* event, StrukturaDrawing* data) 
{ 
gtk_main_quit(); 
free(data); 
data = NULL; 
} 

すべてのヘルプは本当に感謝しています。

答えて

0

まあデバッグデータ構造をダーニング、次の値があります。 最初のものは持っている:PoziomaLinijka CXX0017:エラー: 以降、全体残りを発見していないシンボル「」持っている:PionowaLinijka CXX0030:エラー:式が

を評価することはできないがああ:私は質問を始めた人で、ニックネームと混同して申し訳ありません。

0

「破壊」信号のコールバックには、Wyjscie機能とは異なる署名があります。たぶん、あなたはむしろあなたがGtkObjectの「破壊」イベントをしたい場合は、hereを参照してくださいドキュメントhere

を参照してください、GtkWidgetの「破壊・イベント」をしたい、あなたは

void Wyjscie(GtkObject* window,StrukturaDrawing* data) 
{ 
gtk_main_quit(); 
free(data); 
} 
にコールバックを変更する必要があります
関連する問題