15

最近、valgrindを使用して作業しているプログラムのいくつかのバグを追跡しようとしましたが、発生したエラーの1つは次のとおりです。

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

問題のある行#414は次のようになります

amplitudes__[points_read] = 0x0;

振幅__は以前に次のように定義されています

uint32_t * amplitudes__ = (uint32_t* ) amplitudes;

明らかにuint32_tの長さは4バイトなので、これは書き込みサイズですが、なぜ無効なのか誰かに教えてもらえますか?

4

2 に答える 2

9

points_readほとんどの場合、範囲外です。割り当てたメモリを超えて(または前に)書き込んでいます amplitudes

于 2012-05-07T11:01:01.053 に答える
4

新しいプログラマーがこの警告を受け取るために行う典型的な間違いは次のとおりです。

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

次に、場所'size'でメモリの読み取りまたは書き込みを試みます。

many_a[size] = ...;

ここで、割り当ては次のようになります。

many_a = malloc(sizeof *many_a * (size + 1));
于 2015-10-28T13:17:34.993 に答える