杭电acm总是Runtime Error (ACCESS_VIOLATION)

#include<iostream>#include<cmath>usingnamespacestd;intmain(){inta[300];intm,n;while(c... #include<iostream>
#include<cmath>
using namespace std;
int main()
{
int a[300];
int m,n;
while(cin>>m>>n)
{
int i;
int flag=0;
cin>>a[1];
int max=abs(a[1]);
for(i=2;i<=m*n;i++)
{
cin>>a[i];
if(abs(a[i])>abs(max)) {max=a[i];flag=i;}
}
if(i%n==0) cout<<flag/n<<" "<<n<<" "<<max<<endl;
else cout<<(flag/n+1)<<" "<<flag%n<<" "<<max<<endl;
}

return 0;

}
展开
 我来答
长我默0h
2018-04-04 · TA获得超过1.5万个赞
知道小有建树答主
回答量:154
采纳率:100%
帮助的人:3万
展开全部

可以用传递数组元素个数的方法解决即:用两个实参,一个是数组名,一个是数组的长度。

runtime  error (运行时错误)就是程序运行到一半,程序就崩溃了。

比如说:

  • 除以零

  • 数组越界:int a[3]; a[10000000]=10

  • 指针越界: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]

数组访问越界:

通过数组的下标来得到数组内指定索引的元素。这称作对数组的访问。 

如果一个数组定义为有n个元素,那么,对这n个元素(下标为0 到 n-一的元素)的访问都合法,如果对这n个元素之外的访问,就是非法的,称为“越界。 数组占用了一段连续的内存空间。然后,我们可以通过指定数组下标来访问这块内存里的不同位置。

因此,当你的下标过大时,访问到的内存,就不再是这个数组“份内”的内存。你访问的,将是其它变量的内存了。

解决办法:

由于数组的元素个数默认情况下是不作为实参内容传入调用函数的,因此会带来数组访问越界的相关问题,解决问题方法,可以用传递数组元素个数的方法即:用两个实参,一个是数组名,一个是数组的长度。

举例: #include void PutArray(int *p, int length) {    // 在此判断入口参数p和length的有效性    ……    for(int i=0;i<length;i++)    printf("%d\t",p[i]); } void main() {   int a[三]={二,四,陆} ; printf("数组a[三]调用函数PutArray的结果为:\n");   PutArray(a, sizeof(a)/sizeof(a[0]));

Mr_Yang2012
2012-07-08 · TA获得超过1647个赞
知道小有建树答主
回答量:392
采纳率:0%
帮助的人:487万
展开全部
Runtime Error 就是ACM中常说的RE,出现这种错误往往是数组越界造成的,你应该检查数组开的是否足够大,或者在程序处理过程中是否存在数组下表越界的情况。由于你没有说具体是那道题,因此我也无法提供具体的帮助。
追问
谢谢了,后面没有用数组了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式