あなたが与える例では:
gchar *string = function2(function1("something"));
g_free (string);
から文字列を解放することはできませんfunction1()
。これはメモリ リークです。したがって、物事を圧縮するのが良いことはわかっていますが、速度を落とす必要があります。
gchar *temp, *string;
temp = function1("something");
string = function2(temp);
g_free(temp);
temp = NULL;
g_free(string);
そうしないと、そのコードが実行されるたびに、function1()
解放されることのないより多くのメモリが割り当てられ、アプリケーションが長時間実行されると、プログラムは使用可能なメモリを徐々に使い果たし始めます (割り当てられたすべてのメモリが決して解放されないためfree()
) 。 .
もう 1 つの方法は、次のようにラッパーを記述することfunction2()
です。
gchar *function2_wrapper(gchar *c)
{
gchar *ret = function2(c);
free(c);
return ret;
}
gchar *string = function2_wrapper(function1("something"));
しかし、私の意見では、それはおそらく価値があるよりも多くの労力であり、あなたのコードを見ている人は誰でも失われる可能性があり、メモリリークがないのにメモリリークがあると考え、書き直してfree()
実行時に二重エラーに遭遇し、何もありません何が起こっているかを考え、