2012-05-07 31 views
6

私は最近、私はvalgrindのを使用して働いているプログラムで、いくつかのバグを追跡しようとしていた、と私が得たエラーのいずれかだった:解釈valgrindのエラー不正な書き込み4

==6866== Invalid write of size 4 
==6866== at 0x40C9E2: superneuron::read(_IO_FILE*) (superneuron.cc:414) 

問題のライン# 414は

amplitudes__[points_read] = 0x0; 

を読み取り、amplitudes__は明らかに今

uint32_t * amplitudes__ = (uint32_t*) amplitudes; 

UINT32として前に定義されています_tは4バイトの長さなので、これは書き込みサイズですが、誰かがそれがなぜ無効かを教えてくれますか?

答えて

4

points_readはおそらく範囲外です。amplitudesのために割り当てたメモリを過去(または前)に書きます。

2

新しいプログラマがこの警告を得るために行う一般的な間違いがある。その後、

struct a *many_a; 
many_a = malloc(sizeof *many_a * size + 1); 

と「サイズ」の位置でメモリに読み取りまたは書き込みをしてみてください:

many_a[size] = ...; 

ここで割り当てなければなりませんbe:

many_a = malloc(sizeof *many_a * (size + 1)); 
関連する問題