void log(){
time_t current = time(0);
tm *ptm = localtime(¤t);
stuf...
}
Run Code Online (Sandbox Code Playgroud)
只是想确定 - 我需要在方法结束时释放tm指针分配的内存吗?
我需要一个工具,帮助我以类似的方式找到ac程序中的内存泄漏.它应该计算出程序何时覆盖它不应该存在的内存(例如,通过错误计算数组索引).我了解到泄漏实用程序以及图形仪器应用程序.
但是我认为它可以找到分配了新的(或malloc)的内存,这些内存未被释放且不再可访问.我还了解到valgrind应该适用于旧版本(10.5和10.6),但我使用的是Lion(10.7).
我在Mountain Lion的OS X 10.8.1上使用Valgrind版本3.8.0.关于与10.8.1的兼容性,Valgrind的网站说(italics mine):
Valgrind 3.8.0适用于 {x86,amd64} -darwin(Mac OS X 10.6和10.7,支持10.8).
那么,我知道10.8.1只有"有限的支持".尽管如此,这个错误报告说(斜体矿):
这个(最新的3.8.0版本)使Valgrind 编译并能够在OSX 10.8上运行小程序.但是请注意,它仍然使用更大的应用程序断言,并且根本没有正确检查32位程序(Memcheck错过了大多数错误).
好没关系.因此,如果气质,Valgrind应该在10.8.1上工作.所以现在我的问题是:
我能够很好地让Valgrind在10.8.1上编译,但是当我在几个小C程序上运行它时,我看到了一些奇怪的结果.为了尝试减少问题的可能原因,我最终编写了以下"程序":
int main () {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我会说,不是很令人兴奋,而且很少有虫子的余地.然后,我编译并通过Valgrind运行它:
gcc testC.c
valgrind ./a.out
Run Code Online (Sandbox Code Playgroud)
这是我的输出:
==45417== Command: ./a.out
==45417==
==45417== WARNING: Support on MacOS 10.8 is experimental and mostly broken.
==45417== WARNING: Expect incorrect results, assertions and crashes.
==45417== WARNING: In particular, Memcheck on 32-bit programs will fail to
==45417== WARNING: detect any errors associated with heap-allocated …Run Code Online (Sandbox Code Playgroud)