此代码是否会导致内存泄漏

时间:2013-04-12 11:39:55

标签: c pointers memory variable-assignment memory-leaks

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"; 执行时,同样的事情应该发生,现在我想知道在这种情况下如何处理内存。分配给这些字符串的内存是在新的赋值发生时释放还是内存泄漏的形式?

2 个答案:

答案 0 :(得分:3)

您的代码中没有内存泄漏,因为它没有分配任何内容。您只在每个作业的右侧有字符串文字,而且不需要(也不能)取消分配。

请参阅"life-time" of string literal in C

答案 1 :(得分:1)

无需free此类作业。因为它们仅在stack(临时)内存中分配。如果您使用malloc分配内存(它们已在heap中分配),则必须free

相关问题