2011-04-06 4 views
0

私はbashでうまく動作するプログラムをcで書いていますが、valgrindとvalgrindのメモリリークで奇妙な結果が出ます。プログラムはbashで正常に動作しますが、valgrindでは実行されません。

:valgrindの下で〜/サンド/ binofino $ ./a.out

24 = 3 + 21 
24 = 3 + 21 
24 = 3 + 8 + 13 
24 = 1 + 2 + 8 + 13 
24 = 1 + 2 + 3 + 5 + 13 
24 = 1 + 2 + 21 

>:~/sandbox/binofino$ valgrind ./a.out 
==20116== Memcheck, a memory error detector 
==20116== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al. 
==20116== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info 
==20116== Command: ./a.out 
==20116== 
==20116== Invalid read of size 4 
==20116== at 0x804857A: main (in /home/..../sandbox/binofino/a.out) 
==20116== Address 0x41a402c is 0 bytes after a block of size 4 free'd 
==20116== at 0x4025016: realloc (vg_replace_malloc.c:525) 
==20116== by 0x804879F: get_fibo_index (in /home/..../sandbox/binofino/a.out) 
==20116== by 0x804854F: main (in /home/..../sandbox/binofino/a.out) 
==20116== 
24 = 1 + 1 
==20116== Invalid read of size 4 
==20116== at 0x80485CE: main (in /home/..../sandbox/binofino/a.out) 
==20116== Address 0x41a402c is 0 bytes after a block of size 4 free'd 
==20116== at 0x4025016: realloc (vg_replace_malloc.c:525) 
==20116== by 0x804879F: get_fibo_index (in /home/..../sandbox/binofino/a.out) 
==20116== by 0x804854F: main (in /home/..../sandbox/binofino/a.out) 
==20116== 
24 = 1 
==20116== Invalid free()/delete/delete[] 
==20116== at 0x4024B3A: free (vg_replace_malloc.c:366) 
==20116== by 0x804867E: main (in /home/..../sandbox/binofino/a.out) 
==20116== Address 0x41a4028 is 0 bytes inside a block of size 4 free'd 
==20116== at 0x4025016: realloc (vg_replace_malloc.c:525) 
==20116== by 0x804879F: get_fibo_index (in /home/..../sandbox/binofino/a.out) 
==20116== by 0x804854F: main (in /home/..../sandbox/binofino/a.out) 
==20116== 
==20116== 
==20116== HEAP SUMMARY: 
==20116==  in use at exit: 8 bytes in 1 blocks 
==20116== total heap usage: 4 allocs, 4 frees, 20 bytes allocated 
==20116== 
==20116== LEAK SUMMARY: 
==20116== definitely lost: 8 bytes in 1 blocks 
==20116== indirectly lost: 0 bytes in 0 blocks 
==20116==  possibly lost: 0 bytes in 0 blocks 
==20116== still reachable: 0 bytes in 0 blocks 
==20116==   suppressed: 0 bytes in 0 blocks 
==20116== Rerun with --leak-check=full to see details of leaked memory 
==20116== 
==20116== For counts of detected and suppressed errors, rerun with: -v 
==20116== ERROR SUMMARY: 5 errors from 3 contexts (suppressed: 11 from 6) 

だけでなく、それはメモリを報告bashで実行

漏れ、それはまたエラーを報告し、プログラムの出力は完全に間違っています。

なぜですか?

+2

、あなたのプログラムでいくつかの潜在的なバグ* *を持っているように見えます。 –

答えて

1

あなたにはバグがあります(実際にはいくつかのバグがあります)。

特に、get_fibo_indexの場合、mainの最後の部分は、完全に未定義の結果が得られます。

-gでプログラムを再構築し、Valgrindで再実行し、見つかったすべての「無効な」エラーを修正します。

-gを再構築することは、あなたがファイルを与えると簡単にエラーを修正行いますラインの情報になります。)

+0

多くのおかげで、私は最終的に何が問題であるかを理解しました。なぜbashで問題なく動作するのか混乱するだけでした。私は、メモリブロックの要求が小さく、新しい場所に移動することなくそれを拡張する必要があるため、それがbashで実行されたときに問題が隠されているためです。 – zhanwu

関連する問題