在下面的代码块中,我创建了一个指向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);
答案 0 :(得分:0)
应该没问题,因为在调用g_signal_connect_data
之前会复制指针本身,所以稍后通过执行第二次g_malloc
为其分配新地址并不重要。
然而,你失去了对第一个g_malloc
'内存的唯一引用(除非以某种方式它可以从firstWidget
访问),如果你想对它进行任何进一步的手动操作,这可能是不可取的
答案 1 :(得分:0)
如果从未使用过信号,就会发生内存泄漏。
这对您来说可能是也可能不是问题。