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
wherestuff
是一个表达式,其计算结果为要返回的值。@int3您的第三个选项是返回指向静态或全局变量的指针。现在你提到了,是的,你的第四个选择是使用垃圾收集器。我的意思是inet_net_ntop。所以,如果我有一个函数,我需要返回一个char*所以我必须使用malloc,然后在不使用时释放它?这是唯一的办法吗?@int3不,不是。只要不是局部变量,就可以返回指向任何对象的指针。那么,不使用malloc如何返回非局部变量呢?@int3您似乎在问如何使用return
语句。语法是returnstuff
wherestuff
是一个表达式,其计算结果为要返回的值。@int3您的第三个选项是返回指向静态或全局变量的指针。现在您已经提到了,是的,您的第四个选择是使用垃圾收集器。