重用malloc将不同的指针传递给信号处理程序

时间:2011-05-11 17:32:51

标签: c gtk malloc glib

在下面的代码块中,我创建了一个指向struct的指针,这样我就可以向gtk信号处理程序提供多个变量,当处理程序断开连接时,该处理程序被设置为自动g_free()结构。

第二部分malloc再次变量,并将新指针发送给新的信号处理程序。这有用吗?

只是从阅读它开始,我认为它会将第一个结构数据留在指针处,并创建一个新指针,我可以在以后更改数据,所有这些都在以后正确处理内存。

知道malloc并非如此简单,我想知道是否有一些我缺失的东西,或者应该考虑到。

signaldata * s;
s = (signaldata *) g_malloc(sizeof(signaldata *));
s->col = 0; s->secondaryCol = -1; s->model = GTK_TREE_MODEL(itemModel);
g_signal_connect_data(firstWidget,"edited",(GCallback) treeview_text_edited,s, (GClosureNotify) g_free, 0);

s = (signaldata *) g_malloc(sizeof(signaldata *));
s->col = 1; s->secondaryCol = -1; s->model = GTK_TREE_MODEL(itemModel);
g_signal_connect_data(secondWidget,"edited",(GCallback) treeview_text_edited,s, (GClosureNotify) g_free, 0);

2 个答案:

答案 0 :(得分:0)

应该没问题,因为在调用g_signal_connect_data之前会复制指针本身,所以稍后通过执行第二次g_malloc为其分配新地址并不重要。

然而,你失去了对第一个g_malloc'内存的唯一引用(除非以某种方式它可以从firstWidget访问),如果你想对它进行任何进一步的手动操作,这可能是不可取的

答案 1 :(得分:0)

如果从未使用过信号,就会发生内存泄漏。

这对您来说可能是也可能不是问题。