2016-09-15 12 views
0

は、ここでそれは一般的に正常に動作しているが、時折上に示したワンセグ障害がスロー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の下でプログラムを実行してみてください。おそらく、記憶は以前より壊れており、バレンタインデーはあなたにこれを指摘するかもしれません。 –

+1

ランダムなsegフォルトが発生した場合は、通常、関数内でローカル変数を使用し、関数の終了時に再度使用する(ポインタを投げる)ためです。 tmとは何ですか? – Alexi

答えて

3

malloc又はfree内部の衝突は、症例の99.999%の他の場所に以前のヒープ破損の結果です。 mallocに後続のクラッシュにつながる可能性がヒープ破損の

例:ヒープに割り当てられたバッファのオーバーフローまたはアンダーフロー、二回いくつかのポインタにfreeを呼び出し、非割り当てられたメモリにfreeを呼び出し、等等

このようなバグを見つける最速の方法はvalgrind(ご利用のプラットフォームで利用可能な場合)またはAddressSanitizer(最近のバージョンのClangとGCCで実装されています)です。

関連する問題