このコードが実行されたとき、ライブラリ dmalloc はどういうわけか、範囲外のメモリ アクセスがあったと判断しました。1023 個の要素を割り当て、1024 番目の要素にアクセスしようとしたためです。(配列インデックスは 0 ベースです)。
#include "dmalloc.h"
int main(){
char *ch = malloc(1023);
ch[1023] = 0x00;
return 0;
}
どうやって知ることができますか?
dmalloc ライブラリを使用すると、実際には要求よりも多く割り当てられます。それはあなたに返される記憶の前後に1つの領域を保持します。これらの領域は、メモリを解放するときにチェックされる特別な値で埋められます。これらの値が正しくない場合は、明らかに範囲外のメモリを変更しています。
最も簡単な方法は、センチネルを使用することです。センチネルは、dmalloc によって既知のパターンで埋められる単純なメモリ ブロックです。次に、そのパターンが破棄されているかどうかを確認し、エラーをフラグします。