为什么char * T =“你好”;不会给内存泄漏?

时间:2013-11-09 15:55:10

标签: c memory-leaks

我在C中声明了一个简单的字符串:

#include <stdio.h>

int main()
{
    char *t1 = "hello";
    return 0;
}

如您所见,我的代码中没有free。我用valgrind使用此命令检查了它:

valgrind --tool=memcheck --track-origins=yes --leak-check=yes --show-reachable=yes -v --track-fds=yes ./test

它说:

==4329== HEAP SUMMARY:
==4329==     in use at exit: 0 bytes in 0 blocks
==4329==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==4329== 
==4329== All heap blocks were freed -- no leaks are possible
==4329== 
==4329== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)

为什么?我的意思是,我使用了指针*T,但没有在任何地方释放它。我以为它应该给我一个内存泄漏。为什么不?

2 个答案:

答案 0 :(得分:2)

您没有分配内存。您正在可执行文件的数据段中创建一个常量字符串,并指定指向该内存位置的指针。释放它(或写入该内存位置)将是一个错误(未定义的行为)。

答案 1 :(得分:2)

它不是使用malloc的运行时内存分配,需要将其释放回来。对于这种静态分配,释放内存直接在程序范围退出。