永发信息网

C++语言中加static的数组问题

答案:2  悬赏:50  手机版
解决时间 2021-03-02 01:02
  • 提问者网友:蓝莓格格巫
  • 2021-03-01 10:08
这是个求1000以内的完全数的函数即一个数等于它的因子之和,不包括本身;如6=1+2+3;#include
using namespace std;
int main()
{ int m;
static int a[20];
cout<<"请输入要寻找的完全数的范围:";
cin>>m;
for(int j=6;j<=m;j++)
{
int s=0,n=0;
for(int i=1;i
if((j%i)==0)
{ n++;
s=s+i;
a[n]=i;
}

if(s==j)

{ cout< for(int k=1;k<=n;k++)
cout< cout< }
}
return 0;
}
该程序在定义数组时加了个static,加了之后是正确的,运行出:6是一个完全数,它的因子是:1 2 3、28是一个完全数,它的因子是:1 2 4 7 14、496是一个完全数,它的因子是1 2 4 8 16 31 62 124 248;而当把static去掉之后运行结果却没有了最后一个“496是一个完全数,它的因子是1 2 4 8 16 31 62 124 248”;这是什么原因啊?原以为应该没什么变化的,怎知却变这样了,望高手指点下,到底加那个与不加有什么区别
最佳答案
  • 五星知识达人网友:英雄的欲望
  • 2021-03-01 11:16
这个程序本身不够完善。算496时,最大的因数为248,远远超过了a[20]的范围,我想之所以你的程序在写static时候能运行成功,是因为当变量为staitc时是被分配在静态区,也许是因为静态区内存比较空闲或不经常修改的原因,你的程序仍然输出正常,只是运气好的原因。

要让够大的数也能运行,要把a[]的范围该得更大(按照你的算法),你可以试试int a[400]应该是可以正常输出的
全部回答
  • 1楼网友:封刀令
  • 2021-03-01 12:36
这种应该不算是异常,是程序的bug,用c++的异常处理也比较难捕捉,越界读写都可能导致错误的结果,甚至导致程序崩溃,要处理这种情况只能靠平时写代码时多积累,在有可能发生越界的地方做相应的判断处理。另外,可以用一些静态代码检查工具来帮助发现问题,但是并不能保证所有问题都能发现,关键还是要靠程序员的经验,所以说一般公司招程序员都需要有经验的。比较好的工具有pc-lint,比如我下面这个例子: 我上面的代码发生了写越界,但是运行时,并不能捕获异常。使用pc-lint检查工具来检查,可以发现这两个地方的越界写都可以检查出来。双击下面的提示就能转换到有问题的代码。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯