Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以更改malloc返回的指针吗_C_Malloc_Gstring - Fatal编程技术网

可以更改malloc返回的指针吗

可以更改malloc返回的指针吗,c,malloc,gstring,C,Malloc,Gstring,在为一个个人项目编程时,我发现当我向一个函数传递指针时,它的值无法更改。例如: ... GString *buf = NULL; buf = g_string_sized_new(64); somefunc(buf, filename); ... 及 在观看调试器之后,我观察到当缓冲区的内存分配运行时,buf=0x80b720,otherfunc()返回0x80b750。虽然缓冲区的值没有改变。所以我想问一下,是否有人知道为什么会发生这种情况,以及这是否是malloc()的一个普遍特征。换句话

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

...
GString *buf = NULL;
buf = g_string_sized_new(64);
somefunc(buf, filename);
...


在观看调试器之后,我观察到当缓冲区的内存分配运行时,buf=0x80b720,otherfunc()返回0x80b750。虽然缓冲区的值没有改变。所以我想问一下,是否有人知道为什么会发生这种情况,以及这是否是malloc()的一个普遍特征。换句话说,如果您将malloc()调用返回的指针传递给函数,那么您是否能够在函数体内部或外部更改此值?

这与
malloc
无关

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

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

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

这与
malloc
无关

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

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

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

您可能想提到术语“按值传递”,C是,而不是。我还想指出,在函数中更改buf的值可能会导致内存泄漏(因为现在您无法释放最初分配的内存)。我想补充一点,将指针传递给函数与将整数传递给函数几乎相同,只是整数恰好是一个内存地址。您可能想提到术语“pass by value”,C是,而不是。我还想指出,在函数中更改buf的值可能会导致内存泄漏(因为现在您无法释放最初分配的内存)我想补充一点,向函数传递指针与向函数传递整数几乎相同,只是整数恰好是内存地址。