C++ 标准库是否在C中释放返回的char*变量?

C++ 标准库是否在C中释放返回的char*变量?,c++,c,malloc,C++,C,Malloc,我有一个函数,它返回一个char*。此字符*不得被任何其他程序擦除或重复使用。我知道C++中你不会使用Maloc,但是你和我(我)使用新< /代码>在内存中分配空间。 如果我这样做: char buffer[100]; //I just sub'ed rbp at least 100bytes+allign 返回时,此空间将不再归属于当前函数,因此返回此缓冲区ptr是危险的 总之,我想知道为什么stdio和其他一些lib可以返回char指针,而我们甚至懒得释放它们?它们是用malloc分配的还

我有一个函数,它返回一个
char*
。此字符*不得被任何其他程序擦除或重复使用。我知道C++中你不会使用Maloc,但是你和我(我)使用<代码>新< /代码>在内存中分配空间。 如果我这样做:

char buffer[100]; //I just sub'ed rbp at least 100bytes+allign
返回时,此空间将不再归属于当前函数,因此返回此缓冲区
ptr
是危险的

总之,我想知道为什么
stdio
和其他一些lib可以返回char指针,而我们甚至懒得释放它们?它们是用malloc分配的还是仅在堆栈中? 我应该如何实现我的C(only)函数来返回字符数组以确保安全?

(您可以在计算机上运行
maninet\u net\u ntop
;这是一个在线版本,可能与您的系统略有不同)

返回值 成功时,inet\u net\u ntop()返回pres。出错时返回NULL, 设置errno以指示错误的原因

pres
是参数之一。因此,除非有错误,否则它将返回与您给定的指针相同的指针。

(您可以在计算机上运行
man inet\u net\u ntop
;这是一个在线版本,可能与您的系统略有不同)

返回值 成功时,inet\u net\u ntop()返回pres。出错时返回NULL, 设置errno以指示错误的原因


pres
是参数之一。因此,它返回与您给定的指针相同的指针,除非有错误。

取决于指针指向的对象。你在想什么功能?您是否阅读了该函数的文档?是一个从套接字fd接收数据并返回该数据的函数。我知道如果我在返回时删除缓冲区,我需要在返回后释放缓冲区。但你知道做同样的事情很无聊。所以像inet_net_ntop()一样,返回char*(或const char*),当我使用它时,我不关心free或任何东西。我只是使用它,当我完成时,它就完成了。inet_net_ntop()是否在内部使用malloc?返回指针的函数的文档应该(直接或间接)告诉您需要如何管理该指针。所有函数都没有单一的答案。我不会使用
new
来分配空间,这取决于它们指向什么。你在想什么功能?您是否阅读了该函数的文档?是一个从套接字fd接收数据并返回该数据的函数。我知道如果我在返回时删除缓冲区,我需要在返回后释放缓冲区。但你知道做同样的事情很无聊。所以像inet_net_ntop()一样,返回char*(或const char*),当我使用它时,我不关心free或任何东西。我只是使用它,当我完成时,它就完成了。inet_net_ntop()是否在内部使用malloc?返回指针的函数的文档应该(直接或间接)告诉您需要如何管理该指针。所有函数都没有单一的答案。我没有使用
new
来分配空间,我是说inet\u net\u ntop。所以,如果我有一个函数,我需要返回一个char*所以我必须使用malloc,然后在不使用时释放它?这是唯一的办法吗?@int3不,不是。只要不是局部变量,就可以返回指向任何对象的指针。那么,不使用malloc如何返回非局部变量呢?@int3您似乎在问如何使用
return
语句。语法是
returnstuff
where
stuff
是一个表达式,其计算结果为要返回的值。@int3您的第三个选项是返回指向静态或全局变量的指针。现在你提到了,是的,你的第四个选择是使用垃圾收集器。我的意思是inet_net_ntop。所以,如果我有一个函数,我需要返回一个char*所以我必须使用malloc,然后在不使用时释放它?这是唯一的办法吗?@int3不,不是。只要不是局部变量,就可以返回指向任何对象的指针。那么,不使用malloc如何返回非局部变量呢?@int3您似乎在问如何使用
return
语句。语法是
returnstuff
where
stuff
是一个表达式,其计算结果为要返回的值。@int3您的第三个选项是返回指向静态或全局变量的指针。现在您已经提到了,是的,您的第四个选择是使用垃圾收集器。