#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
谁能帮忙解释一下?
如果我添加“免费(pa);” 在main的最后:+debug模式下,会导致HEAP CORRUPTION ERROR。+在释放模式下,仍然没有任何反应。