c++代码问题......

#include<iostream>usingnamespacestd;voidarray_input(intarray[],intn);intsquare_sum(in... #include<iostream>
using namespace std;
void array_input(int array[],int n);
int square_sum(int array[],int n);
int main()
{
int i[5],ret;//此处数组设置为5时能运行不过会报错
array_input(i,6);
ret=square_sum(i,6);
cout<<"数组的各元素平方和:"<<ret<<endl;
return 0;
}
void array_input(int array[],int n)
{

puts("请输入数组元素:");
for(int i=0;i<n;i++)
cin>>array[i];
}
int square_sum(int array[],int n)
{
int ret=0;
for(int i=0;i<n;i++)
ret+=array[i]*array[i];
return ret;
}
上面这段代码是输入一个六个元素求平方和的小程序,为什么数组那设置为5时就会报错,设置为6又正常?
展开
 我来答
whitebob
2017-12-09 · TA获得超过208个赞
知道小有建树答主
回答量:142
采纳率:100%
帮助的人:134万
展开全部
这个程序有溢出漏洞。程序内声明的数组是在栈上分配的,如果声明的只有5个,却输入了六个,第六个访问时就会出现非法访问,有可能会更改到返回地址,在debug模式下会通不过framecheck。
因为要输入多少个元素是根据用户输入决定的,因此正确的做法应该是使用堆来动态分配内存 (new 和 delete)这样才能保证无论使用多少元素,内存分配都不会出现访问溢出问题。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式