我怎么知道将指针传递给函数后可以释放指针?

时间:2018-11-23 08:38:38

标签: c gtk3

例如https://developer.gnome.org/gdk3/stable/gdk3-Windows.html#gdk-window-begin-draw-frame,将指向region的指针作为参数。那么,我怎么知道它没有将其存储在以后使用的地方?还是可以在调用函数后立即释放指针? GTK中有任何常规程序吗?

谢谢。

1 个答案:

答案 0 :(得分:3)

通常,可以使用指针的“所有权”概念解决此问题。相关的内存区域。

从本质上讲,该函数必须定义它是否拥有该区域的所有权(在这种情况下,您可以将其传递给该函数,而不必关心它,但是OTOH必须以某种方式分配它该函数可以使用),或者仅“借用”指针。在这种情况下,它仍然是您的,该函数只是暂时使用它。

第三种选择是混合情况:该函数借用所有权,但是要求您保持存储器保持分配(即可用),直到发生某种动作(例如释放给定资源)为止。在这种情况下,您可以从中选择内存(堆,堆栈,静态内存等),但是您有责任保持足够长的可用性。

该函数的功能应在某处记录。