gpt4 book ai didi

malloc返回的指针可以改变吗

转载 作者:太空宇宙 更新时间:2023-11-04 00:31:55 26 4
gpt4 key购买 nike

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

...
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);
}

关于malloc返回的指针可以改变吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11532834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com