2016-09-15 2 views
0

Вот стек пуmalloc() seg fault в localtime()?

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); 

Это, как правило, работает нормально, но время от времени бросает вина сегментный показано выше.

Любые идеи?

+5

Несколько потоков, называющих это? – 2501

+8

Если вы используете Linux, попробуйте запустить программу под valgrind. Скорее всего, память была повреждена раньше, и valgrind может указать на это. –

+1

Когда вы получаете случайную ошибку seg, обычно это потому, что вы используете локальную переменную внутри функции и пытаетесь снова использовать (бросать указатель), когда функция заканчивается. Что такое tm? – Alexi

ответ

3

Любые идеи?

Любой сбой в malloc или free в 99,999% случаев результат ранее коррупции кучи в других местах.

Примеры кучного коррупции, которые могут привести к последующему краху в malloc: вызов free на нераспределенных памяти, называя free на какой-то указатель дважды, переполненные или Опустошений динамической памяти выделяется буфер, и т.д. и т.п.

Самый быстрый способ найти такие ошибки: valgrind (если доступно на вашей платформе), или AddressSanitizer (реализован в последних версиях Clang и GCC).