我有一个设备,可以是“路由器”或“交换机”。我使用下面的函数,向它传递一个返回字符串的枚举。我的问题是 whoami 的内存是在堆栈上分配的。当此函数 devicetype_string 完成时,堆栈将被销毁。当我使用指向堆栈上分配的内存的指针时,这不会导致问题吗?
当前代码有效。我只是想了解为什么它有效。我认为更清洁和便携的解决方案是 malloc 内存来保存 whoami(以便它进入堆)并且调用函数应该释放该内存。
这是当前程序:
char *devicetype_string (FwdrType devicetype)
{
char *whoami;
switch (devicetype)
{
case FWDR_TYPE__ROUTER:
whoami = "Router";
break;
case FWDR_TYPE__SWITCH:
whoami = "Switch";
break;
default:
whoami = "Fwder Type UNKNOWN";
}
return whoami;
}
foo()
{
. . .
FwderType abc = FWDR_TYPE__ROUTER;
printf ("%s", devicetype_string(abc));
}
最佳答案
这不是内存泄漏,也不是未定义的行为。
函数devicetype_string
中,whoami
指向所有路径中的一个字符串字面量。字符串文字具有静态存储持续时间,它们不需要被释放。
关于c - 这是内存泄漏,因为内存是在堆栈上分配的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25737478/