我正在使用GPtrArray
结构来保存指向动态分配内存块的指针。由于我需要尽可能简单和正确的内存释放,我设置了回调g_ptr_array_new_with_free_func ()
,它将释放指针数组的一个元素。因此,当我调用g_ptr_array_free()
数组的所有元素时,就会调用回调,它会正确释放分配的内存。这是一些描述问题的伪代码:
...
GPtrArray *stack = g_ptr_array_new_with_free_func(pt_free_stack_element);
if(...) {
...
g_ptr_array_free(stack);
...
}
if(interrupt) {
// Here I need to do something like pop() for stack
// I want to get pointer at some allocated element,
// and remove it from stack, but without freeing
// memory of this element
}
问题是文档说 any g_ptr_array_remove()
, g_ptr_array_remove_index()
, g_ptr_array_remove_fast()
,g_ptr_array_remove_index_fast()
如果设置了回调,则通过调用回调来破坏元素的内存。如您所见,我已设置回调。
好吧,一般我怎么能做到这一点?如何获取指向元素的指针,例如g_ptr_array_index()
从数组中删除任何提及此指针的内容,但不释放元素的内存?