c - 这是内存泄漏,因为内存是在堆栈上分配的吗?

标签 c memory memory-management heap-memory stack-memory

我有一个设备,可以是“路由器”或“交换机”。我使用下面的函数,向它传递一个返回字符串的枚举。我的问题是 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/

相关文章:

c - 如何确定Pi(π)的准确度

iphone - 使用performSelectorInBackground运行加载指示器

python - 为什么我的 Fortran 代码用 f2py 包装使用了这么多内存?

linux - 多次调用后 `mprotect` 失败

iphone - tableviewDataSource 中的内存管理

c - 有没有可能用给定的 B 和 C 在 "A & B = C"中恢复 A?

c++ - 如何在 Makefile 中创建静态隐式规则?

c - 使用 Windows 10 和 C (Visual Studio 2015) 进行套接字编程

内存传输 Intel 组装 AT&T

memory - 为什么包装 Data.Binary.Put monad 会造成内存泄漏?