2013-11-09 47 views
3

我宣布在C简单的字符串:为什么char * T =“hello”;不会泄漏内存?

#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,但没有释放任何地方。我认为它应该给我一个内存泄漏。为什么不?

+0

你必须(m)分配一些东西来泄漏一些东西。 –

+0

如果你没有'malloc()'任何东西,你不必'free()'任何东西。 – user2422531

+0

只要看看valgrind的输出,它就会说“堆概要”:堆是动态分配的东西(即'malloc'ed)的东西。 – effeffe

回答

2

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

2

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