分析localtime返回值造成的一个bug
2010-10-22 15:18
405 查看
最近写了下面的代码
time_t _time = (time_t)lastUpdTime;;//lastUpdTime从某处加载的
tm *tptime = localtime(&_time);
time_t now;
time(&now);
tm* tmptime = localtime(&now);
int32 day = tmptime->tm_yday - tptime->tm_yday;
if(day >= 1)
{
...
}
上面代码出现的bug就是 if( day>=1 )这个条件从来不为真,然后我就调试跟踪了下发现day的值每次是0,再仔细一瞧发现 tmptime和tptime的地址竟然是一样的,所以这两个从来都是相等的,然后网上查了下资料关于localtime的返回值说明
The four functions asctime(), ctime(), gmtime() and localtime() return a pointer to static data and hence are not thread-safe. Thread-safe versions asctime_r(), ctime_r(), gmtime_r() and localtime_r() are specified by SUSv2, and available since libc 5.2.5.
原来localtime返回的是静态数据段,难怪了,要安全点还是用 localtime_r为好,就是麻烦点
The localtime_r() function does the same, but stores the data in a user-supplied struct
需要自己申请和释放内存了
其实仔细想想localtime的用法应该就能猜测出来,返回一个指针,而且不需要自己管理内存,基本上是静态数据差不离了,有些还不是不要想当然的好
time_t _time = (time_t)lastUpdTime;;//lastUpdTime从某处加载的
tm *tptime = localtime(&_time);
time_t now;
time(&now);
tm* tmptime = localtime(&now);
int32 day = tmptime->tm_yday - tptime->tm_yday;
if(day >= 1)
{
...
}
上面代码出现的bug就是 if( day>=1 )这个条件从来不为真,然后我就调试跟踪了下发现day的值每次是0,再仔细一瞧发现 tmptime和tptime的地址竟然是一样的,所以这两个从来都是相等的,然后网上查了下资料关于localtime的返回值说明
The four functions asctime(), ctime(), gmtime() and localtime() return a pointer to static data and hence are not thread-safe. Thread-safe versions asctime_r(), ctime_r(), gmtime_r() and localtime_r() are specified by SUSv2, and available since libc 5.2.5.
原来localtime返回的是静态数据段,难怪了,要安全点还是用 localtime_r为好,就是麻烦点
The localtime_r() function does the same, but stores the data in a user-supplied struct
需要自己申请和释放内存了
其实仔细想想localtime的用法应该就能猜测出来,返回一个指针,而且不需要自己管理内存,基本上是静态数据差不离了,有些还不是不要想当然的好
相关文章推荐
- localtime返回值造成的一个bug
- ShareSDK造成App崩溃的一个BUG原因分析以及Fix方法
- 一个误用snprintf的bug分析
- Websphere App Server 6造成磁盘空间不足的一个小bug
- 一个误用snprintf的bug分析
- 一个诡异BUG引发的血案(线程死锁造成的CPU利用率逐渐增高)
- 一个并发环境下的BUG分析
- 【经验】Java中引用同一个object造成的bug
- 也谈Elecard码流分析软件中的一个小bug
- UGC版中的一个速度只有几K的BUG分析
- 一个异步io中同步调用close造成数据传输不完整的bug。
- shell脚本中case条件控制语句的一个bug分析
- 关于a标签中图文链接在IE的一个BUG分析
- 一个panic bug的分析过程1
- Tomcat一个BUG造成CLOSE_WAIT
- 实战分析一个崩溃的bug (2010-10-25 01:51:24)
- lambda过程作为返回值的例子-分析,及一个作用域的例子
- 分享一个IPhone bug的分析过程(兼xcode编译器应该改进的地方)
- 一个友盟BUG的思考和分析:Invalid update
- 一个kernel crashBUG分析