0
int main()
{
    char* str;

    str = "string one";
    str = "string two";
    str = func();
    str = "string four";
    return 0;
}

char* func()
{
    char* tmp;

    tmp = "string three";
    return tmp;
}

我知道 str = "string one"; 为此字符串分配内存并将该内存的地址分配给 str . 正确地,在执行和 str = "string two"; 执行时应该发生同样的事情,现在我想知道在这种情况下如何处理内存。当新分配发生时分配给这些字符串的内存是否会释放或者它是一种内存泄漏形式? str = func(); str = "string four";

4

2 回答 2

3

您的代码中没有内存泄漏,因为它没有分配任何东西。每个赋值的右侧只有字符串文字,不需要(也不能)解除分配。

请参阅C 中字符串文字的“生命周期”

于 2013-04-12T11:41:09.357 回答
1

不需要free这种类型的分配。因为它们仅分配在stack(临时)内存中。如果您已使用分配内存malloc(它们在 中分配heap),则必须free

于 2013-04-12T11:51:52.727 回答