簡體   English   中英

重用malloc將不同的指針傳遞給信號處理程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM