個人的なプロジェクトのプログラミング中に、ある関数へのポインターを渡したときに、その値を変更できないことがわかりました。例:
...
GString *buf = NULL;
buf = g_string_sized_new(64);
somefunc(buf, filename);
...
と
void somefunc(GString *buf, gchar *filename)
{
buf = otherfunc(filename); //otherfunc() returns a GString *
}
デバッガーを監視した後、バッファー実行のメモリ割り当て時に、buf = 0x80b720およびotherfunc()が0x80b750を返すことを確認しました。バッファの値は変更されませんでしたが。それで、なぜこれが起こるのか、そしてこれがmalloc()の一般的な特徴であるかどうか誰かが知っているかどうか尋ねたいと思います。つまり、malloc()呼び出しによって返されたポインターを関数に渡すと、この値を関数本体の内部または外部で変更できますか?