奇葩的数组越界
已解决:http://bbs.csdn.net/topics/390881205?page=1#post-398149811
题目大意:
求1-1000以内的所有完数,并输出其因子
例6=1+2+3,故6是完数
Error原因:!!! 在main函数里申明一个数组int k[11];(用于存下所有的因子),在gcc(code::block 10.05)下能编译通过,且能输出正确结果,在中间调试的时候明显能看到k数组越界!!但是!!把k数组增大,例如k[20],程序会挂在a=420的地方,而把k数组申明在main函数外 或者 在main函数内申明一个比较大的数组,则不会挂掉
为毛 int k[11] 就可以哪!!
代码如下:
#include<iostream> #include<stdio.h> using namespace std; //int k[2]; int main() { int n,i,a,temp; int k[11]; //int k[20]; for(a=2;a<=1000;a++){ n=0; temp=a; for(i=1;i<=a/2;i++) if(a%i==0) { n++; k[n]=i; temp=temp-i; //printf("k_%d=%d ",n,k[n]); //cout<<endl; } //cout<<"n="<<n<<endl; //cout<<"a="<<a<<endl; /* if(a==419){ cout<<temp<<endl; for(i=1;i<=n;i++) cout<<k[i]<<" "; cout<<endl; } cout<<n<<endl; */ if(temp==0) { cout<<a<<" is a 完数"<<endl; cout<<"its factors are:"; for(i=1;i<n;i++) cout<<k[i]<<","; cout<<k[n]<<endl<<endl; } } return 0; }
作者:pngcui
博客园:http://www.cnblogs.com/pngcui/
github:https://github.com/pngcui
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。