【发布时间】:2016-09-15 09:48:35
【问题描述】:
这是 ny 堆栈
malloc() at 0xb7dfd333
strdup() at 0xb7e01866
tzset_internal() at 0xb7e2ef68
__tz_convert() at 0xb7e2f26a
localtime() at 0xb7e2d901
Send_Trace() at my_trace.c:265 0x8053373
这是有问题的代码..
void Send_Trace(const char const *Trace_Text, ...)
{
time_t time_now = time(NULL);
tm = *localtime(&time_now);
它通常工作正常,但偶尔会抛出如上所示的 seg 错误。
有什么想法吗?
【问题讨论】:
-
多个线程调用它?
-
如果您使用的是 Linux,请尝试在 valgrind 下运行您的程序。很可能,内存较早损坏了,valgrind 可能会指出这一点。
-
当你得到随机段错误时,通常是因为你在函数内部使用了一个局部变量,并在函数结束时尝试再次使用(抛出一个指针)。什么是 tm?
-
内存损坏?
-
如果可用,您是否尝试使用
localtime的可重入版本?localtime_r()。我的情况是你从一个信号或类似 ISR 的东西中调用 Send_Trace。
标签: c segmentation-fault