동적으로 할당 된 메모리 청크에 대한 포인터를 보유하기 위해 GPtrArray
구조를 사용하고 있습니다. 가능한 한 간단하고 정확한 메모리 해제가 필요하므로 포인터 배열의 한 요소를 해제하는 콜백 g_ptr_array_new_with_free_func()
을 설정합니다. 따라서 배열의 모든 요소에 대해 g_ptr_array_free()
을 호출하면 할당 된 메모리를 올바르게 해제하는 콜백이 호출됩니다.GPtrArray에서 데이터 추출 포인터
...
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
}
문제는 그 문서가 어떤 g_ptr_array_remove()
, g_ptr_array_remove_index()
, g_ptr_array_remove_fast()
, g_ptr_array_remove_index_fast()
는이 설정되어있는 경우 콜백을 호출하여 요소의 메모리를 파괴하는 것을 말한다이다 : 여기에 문제를 설명 일부 의사 코드입니다. 보시다시피 콜백을 설정했습니다.
음, 일반적으로 어떻게 할 수 있습니까? 배열에서이 포인터에 대한 언급을 삭제하면서 요소의 메모리를 해제하지 않고 g_ptr_array_index()
과 같은 요소에 대한 포인터를 얻으려면 어떻게해야합니까?