c语言编程runtime error怎么解决

#define M 4
#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个回答  推荐于2017-09-09
runtime error(运行时错误)就是程序运行到一半,程序就崩溃了。
根据经验,大多数情况是因为程序员对内存的理解不透彻导致错误应用引起的,简单的说几个常见的:
①除以零的情况,比如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。
第2个回答  2019-06-03

1、在Windows10桌面,右键点击左下角的开始按钮,在弹出的菜单中选择“运行”菜单项。

2、这时会打开Windows10的运行窗口,在窗口中输入命令regedit,然后点击确定按钮。

3、打开Windows10的注册表编辑器窗口,点击窗口中的“编辑”菜单。

4、接下来在弹出的菜单中点击“查找”菜单项。

5、在打开的查找窗口中,我们点击“查找目标”后面的文本框,输入命令runtime,然后选择下面的“全字匹配”前的复选框,接着点击“查找下一个”按钮。

6、一会就会在注册表中找到Runtime注册表键值。

本回答被网友采纳
第3个回答  推荐于2017-09-28
LZ你有两个地方有问题:
(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));本回答被提问者采纳
第4个回答  2011-08-17
你这是数组越界了。。
你声明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++)
改成这样的话,还是不行啊~

相似回答