2016-09-15 1 views
0

여기에 일반적으로 잘 작동되지만 이따금 위와 SEG 오류가 발생localtime()에서 malloc() seg 오류가 발생 했습니까?

void Send_Trace(const char const *Trace_Text, ...) 
{ 
    time_t time_now = time(NULL); 
    tm = *localtime(&time_now); 

..

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  

NY 스택

그리고 여기에 잘못된 코드이다.

아이디어가 있으십니까?

+5

여러 스레드에서 호출하고 있습니까? – 2501

+8

Linux를 사용하는 경우 valgrind에서 프로그램을 실행 해보십시오. 아마도, 메모리가 일찍 손상되었으며 valgrind가 이것을 지적 할 수 있습니다. –

+1

임의의 seg 오류가 발생하면 대개 함수 내에서 지역 변수를 사용하고 함수가 끝날 때 다시 사용하려고합니다 (포인터를 내 보냅니다). tm은 무엇입니까? – Alexi

답변

3

아이디어가 있으십니까?

모든 충돌은 내부 malloc 또는 free 이전 힙 손상의 결과가 다른 경우 99.999 %입니다. malloc 후속 충돌로 이어질 수 힙 손상

예 : 비 할당 된 메모리에 free 전화 등 등에 넘쳐이나 힙 할당 버퍼 언더 플로 회 어떤 포인터 free 호출

이러한 버그를 찾는 가장 빠른 방법은 valgrind (사용자의 플랫폼에서 사용 가능한 경우) 또는 AddressSanitizer (최근 버전의 Clang 및 GCC에서 구현 됨)입니다.