2010-11-21 4 views
5

私はこのコードの明白な部分を持っているをリーク誰も私に助言を与える?ValgrindはC++のメモリは、

==30031== 1 errors in context 1 of 1: 
==30031== Conditional jump or move depends on uninitialised value(s) 
==30031== at 0x402868B: realloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) 
==30031== by 0x80485CB: main (main.cpp:17) 
==30031== Uninitialised value was created by a heap allocation 
==30031== at 0x402860A: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) 
==30031== by 0x4028694: realloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) 
==30031== by 0x80485A6: main (main.cpp:12) 
+0

2回目の再呼び出しの前に行列[0]を初期化していません。それは何かでいっぱいになる可能性があります。 – wj32

+5

ところで、STLコンテナの使用を検討してください。 'std :: vector 'が最も理にかなっています。 reallocは必要ありません。 – Dialecticus

+0

2次元の配列で、値を入力する必要がありますか? –

答えて

6

matrix[0] = (int *) realloc(matrix[0], c * sizeof (int));

あなたは事前にそれを初期化せずにパラメータとしてmatrix[0]渡しています。

1

より強力なユーティリティを使用できます。 BoundsChecker、Deleaker、XWatcher ...

+2

試すhttp://irazin.ru/Programms/XWatcher.htm –

1

メモリリークをデバッグするための強力なツールdeleakerを使用することをお勧めします。

+2

私はこのソフトウェアへのリンクを追加しましたあなた、z0r1fanのサイトにようこそ! –

+0

+5素晴らしいデバッガ:) –

関連する問題