[英]Reusing malloc to pass different pointers to signal handlers
在下面的代碼塊中,我創建了一個指向結構的指針,以便可以向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);
應該沒問題,因為指針本身是在調用g_signal_connect_data
之前復制的,因此以后再通過執行第二個g_malloc
為其分配新地址並不重要。
但是,您只會丟失對第一個g_malloc
內存的引用(除非可以通過firstWidget
對其進行訪問),並且如果您想要對其進行任何進一步的手動操作,那將是不希望的。
如果從不使用該信號,則似乎會發生內存泄漏。
這可能對您來說不是問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.