今天一同事让我帮看一个程序, 最后定位到的问题是内存越界:
int main()
{
int a = 0;
*(double*)&a = 0; // 访问了非法内存, 运行时出错
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int a = -1;
int b = -1;
*(double*)&b = 0; // 访问了a的内存, 其实也危险, 运行时侥幸没有出错
cout << a << endl; // 0
return 0;
}
总之, 像这样大小不一的转化, 要杜绝。