バグレコード:ヒープの破損が検出されました:通常のブロック後



Bug Record Heap Corruption Detected



最初にエラーレポートの元の画像を投稿します。
私はそれをチェックしました、そして彼らはそれが範囲外のアクセスであると言いました、それは動的メモリが解放されたときにこのエラーが報告される原因になりました。しかし、コードを数回チェックして範囲外を見つけられなかった後、推測して見つけました。 。 。
最初に次のコードスニペットを見て、おそらくエラーコードを復元します。

struct test{ char data[2] } test *t = (struct test *)malloc(sizeof(struct test)) fscanf(fp, '%d%d', t->data + 0, t->data + 1)

char with int ASCII値間の関係は混在する可能性があるため、私はそれに慣れています。ファイルの読み書きで1文字を読み書きする手間を省くために、intフォーマット入力読み取りcharを使用したいと思います。
結局fscanf内部タイプチェックはありません。データは、フォーマット文字列で指定されたタイプに従って正確に読み取られ、コピーされます。つまり、a charアドレスの一部をコピーしますintデータのサイズです。私のコンピューターはリトルエンディアンであり、char保存する場合、ASCII値に応じた整数データの補数の形式で保存されます(すべての正の切り捨てられた上位ビットはデータを失いません)。 _ |データを読み取るときのタイプは正常ですが、データを書き込むときは配列の最後の要素が範囲外になります。