c++里面开辟内存int* p=new int[2],实际上却超过了2个int,为什么还能使用?

如题所述

new是在程序的堆空间开辟空间,程序的堆空间很大,一般不容易出现问题,但是如果你int *p是在栈空间,例如是在
void fun()
{
p[2];
strcpy(p,"dfasdfasd");
}
就会出现问题,代码是在栈空间, 这样操作容易造成缓冲区溢出,另外注意在new以后要记得delete,否则会造成内存泄漏,有问题请追问。满意请采纳。追问

谢谢。那么假设想求n个数的平均值,n任意,应该用什么呢?假如new int[10],那么不就不能超过10个数了吗?

追答

double ave
int p*=new int[n];
for(int i=0;i<n;++i)
ave+=p[i];
ave/=n;
代码说话。

追问

谢谢,小弟初学,不要见怪啊

追答

不用谢,有问题,请在百度知道,直接问我,在赚财富值和采纳率。加油

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-16
只要后面的内存区域没有被其他应用程序占用,就可以正常使用,当然风险是一旦被占用,你的程序就会发生异常!
第2个回答  2012-12-16
这是指针使用的语句。是 int *p; p=new int; *p=2;三个语句的合并写法。
第3个回答  2012-12-16
能用,但不好,后面如果有其他程序的数据那就会被你覆盖掉。
相似回答