各位大侠帮忙看看这个程序为何能运行也能出正确结果 就是提示debug error
c语言能运行能出结果但是提示debugerror!thevalueofespwasnotproperlysavedacrossafunctioncall#include<...
c语言能运行能出结果 但是提示 debug error! the value of esp was not properly saved across a function call
#include<stdio.h>
#define N 100
int main()
{
void cal(int k);
int n;
n=50;
cal(n);
return 0;
}
void cal(int n)
{
int a[N]={1};
int i,j,m,b=0;
for (i=2;i<=n;i++)
{
for (j=0;j<=i+50;j++)
{
m=a[j]*i+b;
a[j]=m%10;
b=m/10;
}
}
for (i=N-1;i>0;i--)
if (a[i]!=0) break;
printf("50!=");
for (j=i;j>=0;j--)
printf("%d",a[j]);
printf("\n");
} 展开
#include<stdio.h>
#define N 100
int main()
{
void cal(int k);
int n;
n=50;
cal(n);
return 0;
}
void cal(int n)
{
int a[N]={1};
int i,j,m,b=0;
for (i=2;i<=n;i++)
{
for (j=0;j<=i+50;j++)
{
m=a[j]*i+b;
a[j]=m%10;
b=m/10;
}
}
for (i=N-1;i>0;i--)
if (a[i]!=0) break;
printf("50!=");
for (j=i;j>=0;j--)
printf("%d",a[j]);
printf("\n");
} 展开
6个回答
展开全部
数组下标越界
n=50
for (i=2;i<=n;i++) // i == 50,n==50
for (j=0;j<=i+50;j++) // max j == 100;
最后一个循环a[j] == a[100];
#define N 100
a[N]={1}
数组a[N]下标是0 ~ 99 ;
很明显的数组下标越界,推荐详细阅读指针和数组。
n=50
for (i=2;i<=n;i++) // i == 50,n==50
for (j=0;j<=i+50;j++) // max j == 100;
最后一个循环a[j] == a[100];
#define N 100
a[N]={1}
数组a[N]下标是0 ~ 99 ;
很明显的数组下标越界,推荐详细阅读指针和数组。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
错误信息的意思是"函数调用过程中堆栈指针的值未被正确储存",大概是你函数中的运算嵌套太多了。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这代码有问题,主函数里也能声明其他函数吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
=================================
for (j=0;j<=i+50;j++)
{
m=a[j]*i+b;
a[j]=m%10;
b=m/10;
}
====================================
数组越界了,
n=50;
cal(n);
for (i=2;i<=n;i++)
i会等于50
for (j=0;j<=i+50;j++)
故j会有机会等于100
a[100]=m%10;越界了,造成栈损坏
由于函数返回地址放在栈上,虽然函数cal能跑完,返回时找不到返回的地址了
故报错
for (j=0;j<=i+50;j++)
{
m=a[j]*i+b;
a[j]=m%10;
b=m/10;
}
====================================
数组越界了,
n=50;
cal(n);
for (i=2;i<=n;i++)
i会等于50
for (j=0;j<=i+50;j++)
故j会有机会等于100
a[100]=m%10;越界了,造成栈损坏
由于函数返回地址放在栈上,虽然函数cal能跑完,返回时找不到返回的地址了
故报错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#define N 100
int a[N]={1};//100的数组
n=50;
for (j=0;j<=i+50;j++)//50+100=150
a[j] <=> a[150]
知道怎么回事了吧
int a[N]={1};//100的数组
n=50;
for (j=0;j<=i+50;j++)//50+100=150
a[j] <=> a[150]
知道怎么回事了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询