您的位置:首页 > 编程语言 > C语言/C++

错误记录之内存溢出

2014-05-07 00:00 423 查看
今天的一个问题的记录:

#include<stdio.h>

int main()
{
// static int arr[10]={0,};   //static在这一行!!!!!!!!
int arr[10]={0,};   //static在这一行!!!!!!!!
int i,val,index,total;
int max = -1;
for( val = 2 ; val < 1000 ; val++ )
{
index = -1;
total = val;

for(i=1;i<val;i++)
{
if((val%i)==0)
{
index++;
if( index > max )
max = index;
if( index > 9 )
{
printf("i=%d,val=%d,index=%d,total=%d\n",i,val,index,total);
}
total=total-i;
arr[index]=i;
}
}
if(total==0)
{
printf("%d is good!",val);

for(i=0;i<index;i++)
printf("%d,",arr[i]);
printf("%d\n",arr[index]);
}
}
printf("fuck %d!\n",max);
return 0;
}

主要目的是求完全数,问题出在static那行,如果去除static那么程序会崩溃,加上则不会!

主要原因是局部变量分配在栈上,而恰巧定义数组的大小出现了问题导致内存溢出覆盖了main函数的返回地址,所以导致错误,加了static之后由于数组的分配内存的地址发生变化不是在栈上,所以解决了问题。或者把数组大小改为30则可以解决,因为程序运行期间数组最大能达到30.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  内存溢出 C语言