Linux에서 Boehm 가비지 컬렉터를 GLib와 통합하려고하지만, 한 가지 경우로 메모리를 확보하지 못하는 것으로 나타났습니다. g_strsplit을 여러 번 호출하면 메모리와 segfault가 부족합니다. 가비지 컬렉터 용 README는 동적 라이브러리 내부에서 포인터를 찾는 데 어려움이있을 수 있으며 GC_add_roots를 사용해야 할 수도 있다고 경고했습니다.glib에서 가비지 콜렉션을 사용할 때 메모리 누수가 발생했습니다.
이것을 테스트하기 위해 GLib의 모든 관련 코드를 libglib-2.0.so와 연결하지 않고 원본 파일에 복사했습니다. 이것은 segfault를 제거했는데, 이것은 정말로 이것이 문제라고 말해줍니다. 그러나 GC_add_roots를 사용하여이를 해결하는 방법에 대한 문서는 없습니다. 누군가 나를 도울 수 있습니까? 여기
메모리 누수가 발생하는 코드입니다 :이 현대 입심을 사용하여 입심 수준에서 작업을 얻을 수있는 방법은 없습니다#include <glib.h>
#include <gc.h>
void no_free(void *mem) {}
int main() {
g_mem_gc_friendly = TRUE;
GMemVTable memvtable = {
.malloc = GC_malloc,
.realloc = GC_realloc,
.free = no_free,
.calloc = NULL,
.try_malloc = NULL,
.try_realloc = NULL
};
g_mem_set_vtable(&memvtable);
for (int i = 0; i < 10000; i++) {
char **argv = g_strsplit("blah", " ", 0);
argv[0][0] = 'a'; // avoid unused variable warning
}
return 0;
}