0

この Valgrind エラーに関するいくつかのスレッドを読みましたが、それらのほとんどはローカライズされた応答を返します。将来これらのエラーを自分でデバッグできるように、何が間違っているのかを正確に知りたいです。

関連するコードのみを投稿します。誰かがもっと欲しい場合は、それも投稿します..

だから私はInvalid read of size 4この行にあります:

int t = (p->acts+p->ac)->time;

エラーに関係していると思われるポインター演算に注意してください??

同じメンバーにアクセスすると、この行で同じエラーが発生します。

next->time = next->acts[next->ac].time;

これをデバッグするにはどうすればよいですか..プログラムは正常に動作しますが、何が起こっているのか知りたいです。

さらに情報が必要な場合はコメントしてください。

4

1 に答える 1

1

このエラーは、next->ac( ) が( )p->acに割り当てられたメモリの末尾を超えた値であることを示します。next->actsp->acts

つまり..

next->acts = malloc( sizeof( something ) * count );
next->ac = count;

next>acts[next->ac].time = 0;

count配列インデックスは実際には配列のサイズを 1 つ超えているため (基数 0 など)、これはエラーをスローします。

別の言い方をnext->ac >= countすれば、私が示した例ではそのエラーがスローされます。

割り当てられたメモリの末尾を超えてアクセスすることは未定義の動作であるため、プログラム正しく動作する可能性があります。それはうまくいくかもしれませんし、自然に、誰がどんな騒乱を知っているのかという結果になるかもしれません. ただし、やはり、割り当てられたメモリの末尾を超えてアクセスするとエラーになります。

于 2013-04-26T03:07:24.700 に答える