#include <iostream>
using namespace std;
struct A
{
int a, b;
};
struct B
{
int a;
};
int main()
{
A * pa = (A *)malloc(sizeof(B));
int c = 5;
pa -> a = 3;
cout << pa -> a << endl;
pa -> b = 0;
cout << pa -> b << endl;
cout << c << endl;
return 0;
}
このコードを VC++ 2012 で実行しました。エラー メッセージは生成されません。
pa -> b はメモリーブロックのアウトバウンドにアクセスすると思います。ヒープの破損が発生するはずです! しかし、実際には、デバッグ モードとリリース モードの両方で何も起こりませんでした。
しかし、 int c は A * pa の直後に続くためです。メモリ内では、pa -> b は int c にアクセスすると思います。
プログラムの出力は次のとおりです。 3 4 5
誰でもこれを説明できますか?
「free(pa);」を追加すると メインの最後に: +デバッグ モードでは、HEAP CORRUPTION ERROR が発生します。+リリースモードでは、まだ何も起こりません。