c语言编程runtime error怎么解决
#include"stdio.h"
int fun(int a[][M])
{
int i,j,max;
max=a[0][0];
for(i=0;i<=2;i++)
for(j=1;j<=M;j++)
{if(a[i][j]>max)
max=a[i][j];}
return max;
}
void main()
{
int arr[2][M]={5,8,3,45,76,-4,12,2};
printf("\nThe value of function is:%lf\n",fun(arr));
}这有什么问题啊,请大虾指教~~~好的话可以追加到50分 展开
修正两个错误即可:
1、fun函数里面两个for循环控制变量有问题,应改为下面这种形式:
for(i=0;i<2;i++)
for(j=0;j<M;j++)
{
if(a[i][j]>max)
max=a[i][j];
}
2、输出的时候也有问题,fun函数返回值是int,所以应该是:
printf("\nThe value of function is:%d\n",fun(arr));
扩展资料:
Runtime Error错误解析
1、buffer overflow
缓冲区溢出,缓冲区溢出一般就是你的程序中数组开小了,产生了越界访问,比如:定义int a[100]
此时你引用了a[1000]就很可能出现运行时错误。“缓冲区”一般指的就是程序中定义的一个数组,这片连续的内存空间用以存放一些要处理的数据。
值得一提的是缓冲区溢出漏洞就连成熟的程序员都有可能不小心忽视它导致巨大的损失,所以现在写代码一定要养成深思熟虑,考虑好每一个值的范围,以防越界。之所以存在缓冲区溢出漏洞,一个主要的原因是C语言并不对数组下标进行界限检查。
2、stack overflow栈溢出
栈这个东西在操作系统中通常用来维护一个函数的调用,C语言中在调用函数的时候会依懒一个“栈”这种数据结构的性质的内存。
根据经验,大多数情况是因为程序员对内存的理解不透彻导致错误应用引起的,简单的说几个常见的:
①除以零的情况,比如1/0此类的。
②数组越界:int a[3]; 但程序中的要求却至少是一个为100的数组。
③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000];Runtime error。
(1)fun函数里面两个for循环控制变量有问题,应改为下面这种形式:
for(i=0;i<2;i++)
for(j=0;j<M;j++)
{
if(a[i][j]>max)
max=a[i][j];
}
(2)输出的时候也有问题,fun函数返回值是int,所以应该是:
printf("\nThe value of function is:%d\n",fun(arr));
你声明a[2]的话,只能取a[0],a[1],数组是把0做为开始的。
for(i=0;i<=2;i++)
for(j=1;j<=M;j++)
{if(a[i][j]>max)
max=a[i][j];}
这里都多取了。。。声明a[4]最多只到取到a[3]。
for(i=0;i<2;i++)
for(j=1;j<M;j++)
改成这样的话,还是不行啊~