BoehmガベージコレクタをLinuxでGLibと統合しようとしていますが、メモリを解放していないことが判明しています。g_strsplitを何度も呼び出すと、メモリが不足し、セグメンテーションエラーが発生します。ガベージコレクタ用のREADMEは、ダイナミックライブラリ内でポインタを見つけるのに問題があるかもしれないと警告し、GC_add_rootsを使用する必要があるかもしれません。glibでガベージコレクションを使用するとメモリリークが発生する
これをテストするために、GLibのすべての関連するコードをソースファイルにコピーしました。libglib-2.0.soとは全くリンクしていません。これによりセグメンテーションがなくなり、これは本当に問題であると私に伝えています。ただし、GC_add_rootsを使用してこれを解決する方法に関するドキュメントはありません。誰か助けてくれますか?ここで
は、メモリリークが発生コードです:GLibの2.46、g_mem_set_vtable()
does nothingので
#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;
}