您的位置:首页 > 其它

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

2013-03-24 20:34 281 查看
#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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐