当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 请教C语言中的一个日期函数问题(已解决)
帖子发表于 : 2009-08-14 14:23 

注册: 2006-10-24 10:37
帖子: 207
送出感谢: 0 次
接收感谢: 0 次
#include "time.h"
#include "stdio.h"

int main(void)
{
struct tm *local;
time_t t;
t=time(NUL);
local=localtime(&t);
printf("Local hour is: %d\n",local->tm_hour);
local=gmtime(&t);
printf("UTC hour is: %d\n",local->tm_hour);
return 0;
}

这是网上的一段代码,我想问的是:local是一个指针,本身并没有分配内存,localtime(&t)返回一个指针类型,那么local指向的那块内存应该是由localtime函数内部分配的吧?那么这块内存没有人来负责释放,岂不是有内存泄漏?


最后由 brucezhao 编辑于 2009-08-14 15:03,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: 请教C语言中的一个日期函数问题
帖子发表于 : 2009-08-14 14:52 
头像

注册: 2007-09-26 17:34
帖子: 618
送出感谢: 0 次
接收感谢: 2
程序退出,系统自然会释放程序的内存


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 请教C语言中的一个日期函数问题
帖子发表于 : 2009-08-14 15:03 

注册: 2006-10-24 10:37
帖子: 207
送出感谢: 0 次
接收感谢: 0 次
楼上的想法太随意了,如果写一个7*24小时的服务程序,如果有内存泄漏是很可怕的事情。

我找到了localtime的源码,它是在内部定义了一个静态变量,所以能够返回地址,而且也不会重复多次分配内存,所以这段代码没有问题。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 请教C语言中的一个日期函数问题
帖子发表于 : 2009-08-14 15:06 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
brucezhao 写道:
楼上的想法太随意了,如果写一个7*24小时的服务程序,如果有内存泄漏是很可怕的事情。

我找到了localtime的源码,它是在内部定义了一个静态变量,所以能够返回地址,而且也不会重复多次分配内存,所以这段代码没有问题。


不一定是静态

这类函数一般遵循谁分配谁释放的原则, 除非特别说明, 不用担心这类事情. 就是说当他是静态分配就行了


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 请教C语言中的一个日期函数问题
帖子发表于 : 2009-08-14 15:15 
头像

注册: 2009-05-02 14:51
帖子: 190
送出感谢: 0 次
接收感谢: 0 次
1、内存泄漏是表示运行中的进程使用了new,malloc在heap上分配了内存,但在内存使用完成后没有释放,而且没有指针再指向这块内存,这块内存在当前进程中永远无法再使用或释放。

2、内存泄漏只对一个运行中进程有效,如果进程运行结束,操作系统会把这个进程所有内存释放掉,当然也包括泄漏了的内存。

3、如果一个程序只运行很短的时间,有少量的内存泄漏没有关系,因为进程一结束,进程占用的所有的内存都释放掉了。如果是长期运行的程序,特别是服务器程序,绝不能有内存泄漏。

4、内存泄漏不一定只指内存没有释放,其实程序能申请的所有资源如socket、锁、文件句柄,数据库连接等如果没有合法释放,长期运行中都会有问题,而且泄漏这些资源很多都会表现为内存被大量占用。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 请教C语言中的一个日期函数问题
帖子发表于 : 2009-08-14 16:47 
头像

注册: 2009-07-07 19:52
帖子: 240
送出感谢: 0 次
接收感谢: 0 次
BigSnake.NET 写道:
brucezhao 写道:
楼上的想法太随意了,如果写一个7*24小时的服务程序,如果有内存泄漏是很可怕的事情。

我找到了localtime的源码,它是在内部定义了一个静态变量,所以能够返回地址,而且也不会重复多次分配内存,所以这段代码没有问题。


不一定是静态

这类函数一般遵循谁分配谁释放的原则, 除非特别说明, 不用担心这类事情. 就是说当他是静态分配就行了



你这种说法不对。在标准 C 里,没有人会替你做类似释放内存这样的动作,它和类是不同的。凡是在说明文档里说是静态变量的,就一定是静态的。否则如何释放?不要告诉我程序会自动释放。

谁分配谁释放的原则这个说法没错,但用来说明 localtime 这个函数就不妥当了。


_________________
阿呆 : 天下第一呆!


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 请教C语言中的一个日期函数问题
帖子发表于 : 2009-08-14 16:54 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
linjiework 写道:
BigSnake.NET 写道:
brucezhao 写道:
楼上的想法太随意了,如果写一个7*24小时的服务程序,如果有内存泄漏是很可怕的事情。

我找到了localtime的源码,它是在内部定义了一个静态变量,所以能够返回地址,而且也不会重复多次分配内存,所以这段代码没有问题。


不一定是静态

这类函数一般遵循谁分配谁释放的原则, 除非特别说明, 不用担心这类事情. 就是说当他是静态分配就行了



你这种说法不对。在标准 C 里,没有人会替你做类似释放内存这样的动作,它和类是不同的。凡是在说明文档里说是静态变量的,就一定是静态的。否则如何释放?不要告诉我程序会自动释放。

谁分配谁释放的原则这个说法没错,但用来说明 localtime 这个函数就不妥当了。


考虑这样一种情况, 返回的指针指向一个缓冲区, 那么这个用静态分配还是动态分配好? 静态分配的话要分配多大呢?
所以我最初看二楼回答的时候我是没有说他错的, 只要在每次重新分配时把之前的释放掉, 尽管有一块在程序退出时没有释放, 问题是不大的


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 请教C语言中的一个日期函数问题
帖子发表于 : 2009-08-14 17:16 
头像

注册: 2009-07-07 19:52
帖子: 240
送出感谢: 0 次
接收感谢: 0 次
BigSnake.NET 写道:
linjiework 写道:
BigSnake.NET 写道:
brucezhao 写道:
楼上的想法太随意了,如果写一个7*24小时的服务程序,如果有内存泄漏是很可怕的事情。

我找到了localtime的源码,它是在内部定义了一个静态变量,所以能够返回地址,而且也不会重复多次分配内存,所以这段代码没有问题。


不一定是静态

这类函数一般遵循谁分配谁释放的原则, 除非特别说明, 不用担心这类事情. 就是说当他是静态分配就行了



你这种说法不对。在标准 C 里,没有人会替你做类似释放内存这样的动作,它和类是不同的。凡是在说明文档里说是静态变量的,就一定是静态的。否则如何释放?不要告诉我程序会自动释放。

谁分配谁释放的原则这个说法没错,但用来说明 localtime 这个函数就不妥当了。


考虑这样一种情况, 返回的指针指向一个缓冲区, 那么这个用静态分配还是动态分配好? 静态分配的话要分配多大呢?
所以我最初看二楼回答的时候我是没有说他错的, 只要在每次重新分配时把之前的释放掉, 尽管有一块在程序退出时没有释放, 问题是不大的



你的想法不对,作为一个标准的,大家都在使用的函数,如果大家都像你这样想,这个函数泄露一点内存,另外一个函数泄露一点内存,那最后用户还怎么敢使用这个库?
而且如果是静态分配的,对程序并没有啥影响啊。在不产生内存泄露,又不增加系统复杂度的情况下,这是一种可选方案。(虽然我觉得这样做并不是最好方法)

我觉得写程序一定要尽量严谨,否则如果做个大项目,你会痛苦不已。


_________________
阿呆 : 天下第一呆!


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译