メモリ関連のバグについてリスクを軽減する目的でMudflapを使っています。
そんな中で、以下のコードでviolationが検出されます。fprintfで検出されているようなのですが、violationになるようなコーディングをしているつもりが無いので、エラー(Mudflapで検出される)理由がわかりません。
このコードは、何かメモリを壊すようなコードになっているのでしょうか?
ちなみに、fprintからprintf文に変更するとこの現象(Mudflapでエラー)は出ません。
lang
1#include <stdio.h> 2 3int main(int argc, char * argv[]) { 4 fprintf(stderr, "%s:%d:\n", __FILE__, __LINE__); 5 printf("__FILE__ length: %d\n", strlen(__FILE__)); 6 return 0; 7}
ビルドは以下のようにしています。これが間違えているのでしょうか?
lang
1$ gcc -g -fmudflap -c main.c 2$ gcc -o mudflap main.o -lmudflap
実行結果は以下のようになります。
[devel@devel mudflup]$ ./mudflap ******* mudflap violation 1 (check/write): time=1443861732.896535 ptr=0x7f245844e880 size=216 pc=0x7f245845d531 location=`(fprintf stream)' /usr/lib64/libmudflap.so.0(__mf_check+0x41) [0x7f245845d531] /usr/lib64/libmudflap.so.0(__mfwrap_fprintf+0xe0) [0x7f2458464fc0] ./mudflap(main+0x36) [0x4007ba] number of nearby objects: 0 main.c:4: __FILE__ length: 6
GCCのバージョンを記しておきます。
- gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。