空きポインタメモリの解放エラー:CRTは、ヒープバッファの終了後にアプリケーションがメモリに書き込んだことを検出しました



Release Free Pointer Memory Error



win32プログラムのデバッグ時、メモリを割り当てるmalloc、最後の空き解放メモリエラー時、元のコードは次のとおりです。



ここで、mallocメモリ割り当ての呼び出しが終了した後、pstrの最初のアドレスを0x00c5abb0に、このアドレスをメモリウィンドウにコピーし、次のようにメモリを追跡します。



pstrに割り当てられたバイトサイズは32バイトで、32バイトは初期化されません。0xcd、Microsoft C ++デバッグスタックの4番目の0xfdの後ろにフラグ「noman'sland」歩哨位置の値があります。メモリの境界については、この記事の情報を参照してください。

http://blog.sina.com.cn/s/blog_95bf1ccc010154uu.html

次に、次のステップを試運転した後、_stprintf_s関数を実行した後、問題を発見しました。



ここで、赤はメモリの変更を表し、0xfdも0xfeに変更されています。フォーマットされたデータを詳しく見ると、メモリは_stprintf_sに書き込まれます。プロトタイプのUnicodeバージョンの関数文字列は_swprintf_sです。 2番目のパラメーターのは、バイトではなく文字数です。

明らかな問題が発生した後、次のように、_stprintf_sの最大文字数に渡される2番目のパラメーターを変更します。