一个很有趣的问题,自认为大虾的可以看看

#include <vector>
#include <iostream>
using namespace std;

void main()
{
	int i = 2, j;
	j = i++ + ++i;
	cout << j <<endl;  //等于6

	i = 2;
	i = i++ + ++i;//换((i++) + (++i));此种形式,依然等于7
	cout << i <<endl;  //等于7,为什么等于7呢?

	int n[] = { 1, 2, 3, 4 };
	vector<int> vctInt(n, n + 4);

	int* m = new int(4);

    memcpy(m, &vctInt.at(0), sizeof(int)*vctInt.size());

	delete[] m;//为什么崩溃呢?

}

 

自认为大虾的朋友们,能给小弟解惑一二吗?

根据cyz108D这位哥们的评论,我总结了原因如下:

第一个问题是由于i++引起的,i = i++ + ++i会先执行i = 右边的表达式,最后再i++操作,所以结果就出现了一个6,一个7。

第二个问题,纯属小弟基础不扎实,new int(4),只分配了一个int的内存并初始化为了4,却调用delete []操作,当然是非法的。正确写法是new int[4]

 

posted @ 2013-03-24 20:34  xinyuyuanm  阅读(165)  评论(0编辑  收藏  举报