malloc()seg在localtime()中出错?

时间:2016-09-15 09:48:35

标签: c segmentation-fault

这是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故障。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

  

有什么想法吗?

mallocfree内的任何崩溃都是99.999%的案例,这是其他地方早期堆损坏的结果。

可能导致malloc中的后续崩溃的堆损坏示例:在未分配的内存上调用free,在某个指针上调用free两次,溢出或下溢堆 - 分配缓冲区等等。

找到此类错误的最快方法是:valgrind(如果在您的平台上可用)或AddressSanitizer(在最新版本的Clang和GCC中实施)。