gpt4 book ai didi

c - localtime() 在 c 中因段错误而崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:55 26 4
gpt4 key购买 nike

追查这个问题的原因有点麻烦。

这是代码位:

    #include <time.h>
time_t now;
struct tm *mytime;
char yyyy[5];
char mm[3];
char dd[3];
char mname[10];
if(time(&now)!=(time_t)(-1))
{
mytime=localtime(&now);
strftime(yyyy, sizeof(yyyy), "%Y", mytime);
strftime(mm, sizeof(mm), "%m", mytime);
strftime(dd, sizeof(dd), "%d", mytime);
strftime(mname, sizeof(mname), "%B", mytime);
}

它在 localtime 行崩溃:

段错误(核心转储)

有什么想法吗?

最佳答案

示例代码对我来说运行良好。发布你的完整代码?或者将您的示例减少到最小可能仍然会重现问题。并在你的核心 'gdb -c a.core a.out' 上运行 gdb 并获得回溯(bt)。

localtime 的一个问题是返回的指针是指向静态全局变量的指针,随后调用 localtime 会更新该变量。很久以前把我绊倒过一次。

struct tm *localtime(const time_t *time)

返回值是指向静态分解时间结构的指针,该结构可能会被后续调用任何日期和时间函数覆盖。 (但没有其他库函数会覆盖此对象的内容。)

来自: http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_17.html

关于搜索核心文件:

另见 core dumped - but core file is not in current directory?

确保系统可以写入核心文件。
* 对我来说,在一个示例 ununtu 系统上 ulimit -c 显示 0 *

ulimit -c unlimited

检查使用的模式并将模式更改为简单的一个或不同的位置。

cat /proc/sys/kernel/core_pattern
#sysctl -w kernel.core_pattern=core

搜索一些常见位置并查看/var/log/messages:

ls /var/crash /var/cache/abrt /var/spool/abrt/ /tmp/*core*
tail /var/log/messages

在 ubuntu 上检查 apport 服务配置和 init/rcfiles:

find /etc/ |grep appo

关于c - localtime() 在 c 中因段错误而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22518992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com