valgrindを使用してヒープ破損を検出してみたいと思います。次の破損「ユニットテスト」:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
char * c = (char *) malloc(10) ;
memset( c, 0xAB, 20 ) ;
printf("not aborted\n") ;
return 0 ;
}
valgrindがエラーで中止せず、メッセージを生成するだけであることに驚きました。
valgrind -q --leak-check = no a.out ==11097==サイズ4の無効な書き込み == 11097 == 0x40061F:メイン(/home/hotellnx94/peeterj/tmp/a.out内) == 11097 ==アドレス0x51c6048は、割り当てられたサイズ10のブロック内の8バイトです == 11097 == 0x4A2058F:malloc(vg_replace_malloc.c:236) == 11097 == by 0x400609:main(in /home/hotellnx94/peeterj/tmp/a.out) ..。 中止されません
エラー時に中止するvalgrindオプションが表示されません(gnu-libcのmcheckのように、スレッドセーフではないためmcheckを使用できません)。それが可能かどうか誰かが知っていますか(デーモンとして実行されるため、コードdup2の/ dev / nullへのstdoutであるため、レポートは役に立ちません。その行為の犯人を捕まえるか、それに近い方がいいです)。