c语言编程runtime error怎么解决

#defineM4#include"stdio.h"intfun(inta[][M]){inti,j,max;max=a[0][0];for(i=0;i<=2;i++)f... #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分
展开
 我来答
大野瘦子
高粉答主

2019-06-13 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:1227
采纳率:100%
帮助的人:34.4万
展开全部

修正两个错误即可:

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语言中在调用函数的时候会依懒一个“栈”这种数据结构的性质的内存。

百度网友4de7b94
推荐于2017-09-09 · TA获得超过8158个赞
知道小有建树答主
回答量:1423
采纳率:93%
帮助的人:59.4万
展开全部
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。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
刺友互
高粉答主

2019-06-03 · 每个回答都超有意思的
知道答主
回答量:3979
采纳率:100%
帮助的人:72.8万
展开全部

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

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

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

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

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

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

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MeanSift
推荐于2017-09-28 · 超过33用户采纳过TA的回答
知道答主
回答量:85
采纳率:0%
帮助的人:74.9万
展开全部
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));
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
敛正雅7f
2011-08-17 · TA获得超过2031个赞
知道大有可为答主
回答量:1553
采纳率:0%
帮助的人:1760万
展开全部
你这是数组越界了。。
你声明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++)
改成这样的话,还是不行啊~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式