1

ある種のポインターの衝突が発生しています。

基本的に、私が行う1つの機能では、

a = calloc(1,28); // gives me 0x100100d10

それからすぐに、私が行うサブ機能で、

b = calloc(1,16); // gives me 0x100100d20;

最初のアドレス + 28 は 0x0..d2C です。

何が起きてる?

ポインター値は、gdb ではなく、printf からのものです。

4

1 に答える 1

4

あなたが説明したようにこれが実際に起こっている場合は、割り当てられたブロックの境界外に書き込むことによって(または、おそらく初期化されていないポインターまたは既に解放されたメモリへのポインターを使用することによって)、ヒープが破損しているため、未定義の動作が呼び出されます。ツール valgrind はおそらく問題を追跡するのに役立ちます。または、プログラムが大きすぎない場合は、無効なポインターの使用を手動で検索するだけで済みます。

于 2011-05-12T15:38:46.207 に答える