[C]结构的动态分配存储器,与GTK有关

时间:2011-01-09 20:31:05

标签: c gtk malloc structure allocation

我有以下结构:

    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;
}

任何帮助都非常感激。

2 个答案:

答案 0 :(得分:0)

良好的调试数据结构具有以下值: 第一个有:PoziomaLinijka CXX0017:错误:未找到符号“” 后来其余的都有:PionowaLinijka CXX0030:错误:表达式无法评估

哦:我是开始提问的人,很抱歉昵称混淆。

答案 1 :(得分:0)

“destroy”信号的回调签名与Wyjscie函数不同。也许您更喜欢GtkWidget的“破坏事件”,请参阅文档here

如果您想要GtkObject的“destroy”事件,请参阅here,您必须将回调更改为

void Wyjscie(GtkObject* window,StrukturaDrawing* data)
{
 gtk_main_quit();
 free(data);
}