我正在尝试返回 char*,但我不希望函数用户删除 free() 内存。
我有以下内容:
namespace name_space
{
char* function(unsigned int i);
}
char* name_space::function(unsigned int i)
{
char buffer[MESSAGE];
strerror_s(buffer,errno);
switch(i_exception)
{
case MESSAGE_RETURN: return "No free or delete needed";
case ERRNO_ERROR: return buffer;
default: return "UNKNOWN";
}
}
当我返回“MESSAGE_RETURN”字符串时,不需要 free() 或 delete。但是如何在不使用 new 或 malloc 的情况下返回缓冲区?
最佳答案
前提:
您的函数 name_space::function
不应返回缓冲区
。
buffer
是一个local (auto) 变量,当函数返回时它会被销毁。如果调用函数试图访问该内存,您可能会收到一个seg-fault 或无论如何一个 UB。
回答:
如果你需要返回一个字符串,简单的 std::string
怎么样?动态内存将由类自动处理。
例如:
#include <string>
std::string name_space::function(unsigned int i) {
char buffer[MESSAGE];
strerror_s(buffer, MESSAGE, errno);
switch (i_exception) {
case MESSAGE_RETURN: return "No free or delete needed";
case ERRNO_ERROR: return std::string(buffer);
default: return "UNKNOWN";
}
}
关于c++ - 如何在没有 free() 或 delete 的情况下返回 char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45232357/