今天一同事让我帮看一个程序, 最后定位到的问题是内存越界:

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;
}

     总之, 像这样大小不一的转化, 要杜绝。


本文转载:CSDN博客