C / C ++如何清除system / stdlib调用分配的内存?

时间:2018-03-26 22:32:34

标签: c++ c memory-management memory-leaks

以此代码块为例:

ip_args = list(gp = gpar(fontsize = 9))

我们声明了一个指向tm结构的指针,但我们没有给它任何内存。然后localtime()函数返回我们分配给局部变量'now'的tm结构的地址。

我们是否负责删除/ dealloc()'那个内存,或者那个内存实际上是在堆栈上?

如果localtime()在堆栈上创建了内存,那么在localtime()返回后,'now'指向的内存是否会变为未定义(因此不可靠)?如果localtime()在堆上创建了内存,那么当我们完成它时,我们不需要清理那个内存吗?

我错过了什么?

感谢。

2 个答案:

答案 0 :(得分:2)

它返回一个指向静态内部tm的指针,你不需要进行清理。

C ++ http://en.cppreference.com/w/cpp/chrono/c/localtime

Ç http://en.cppreference.com/w/c/chrono/localtime

答案 1 :(得分:1)

来自localtime的Linux手册页:

  

返回值指向静态分配的结构,可能会被后续调用任何日期和时间函数覆盖。

因此,无论你多少次拨打本地时间,都不会有内存泄漏。

现在关于程序终止时如何释放内存。在您可能遇到的所有操作系统中(可能有一些模糊或古老的系统,这不是真的),当一个进程终止时,它的内存被释放。在具有虚拟内存的现代普通操作系统中,终止进程的内存空间基本上不存在(它如何映射到磁盘上的物理内存或交换文件是用户空间程序看不到的操作系统详细信息),因此整个分配没有任何剩余