c-malloc返回的指针是否可以更改



在为个人项目编程时,我发现当我向一个函数传递指针时,它的值无法更改。示例:

...
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()调用返回的指针传递给函数,那么您是否能够在函数体内部或外部更改该值?

这与malloc无关。

将指针传递给函数时,该函数将接收原始指针的副本。它可以修改自己的指针副本,但不能修改原始指针。

如果您希望它修改原始指针,您需要将原始指针的地址传递给它,它将作为指向指针的指针接收该地址。

void somefunc(GString **buf, gchar *filename) { 
    *buf = otherfunc(filename);
}

相关内容

  • 没有找到相关文章

最新更新