2 thf9527 thf9527 于 2016.01.31 13:28 提问

C++Runtime Error (ACCESS_VIOLATION)
c++

不知道哪里写错了VS2012上能运行处结果 但OJ上有问题
#include
#include
#include
using namespace std;
struct Node
{
string id;
int m,a[10],gread;

}array[1000];

bool cmp(Node a,Node b)
{
if(a.gread!=b.gread)
return a.gread>b.gread;
else
return a.id }
int main()
{
int N,M,G,b[10];
while((cin>>N)&&N!=0)
{
cin>>M>>G;
for (int i = 0; i < M; i++)
{
cin>>b[i];
}
for (int j = 0; j < N; j++)
{
cin>>array[j].id>>array[j].m;
array[j].gread=0;
for (int k = 0; k < array[j].m; k++)
{
cin>>array[j].a[k];
array[j].gread+=b[array[j].a[k]-1];
}
}
std::sort(array,array+N,cmp);
int l=0;
while(array[l].gread>=G)
{
l++;
}
cout<<l<<endl;
for(int i=0;i<l;i++)
{
cout<<array[i].id<<' '<<array[i].gread<<endl;
}
}
return 0;
}

7个回答

caozhy
caozhy   Ds   Rxr 2016.01.31 14:41

运行了你的程序,的确没有发现什么错误。请给出oj的题目或者链接,好帮你看下。

caozhy
caozhy   Ds   Rxr 2016.02.01 08:41

仔细又看了一次

while(array[l].gread>=G)

这里不对。当所有人的成绩都达到分数线,那么你的i会越界。

caozhy
caozhy   Ds   Rxr 2016.02.01 08:43

while(array[l].gread>=G && l < N)

不过你的程序已经很不错了,只有这么一个小小de错误。加油!

qq_28954601
qq_28954601   2016.01.31 15:52

cmp那个函数里面有缺失。。。。。。

91program
91program   Ds   Rxr 2016.01.31 17:36

cmp函数要求返回bool,但是你的代码可能会返回字符串,这对于检测程序来说就是错误。

91program
91program   Ds   Rxr 2016.01.31 17:39

还有,如果输入的M大于10时,也是会有错误。检测程序会不会使用了这种情况,如果是就会产生你说的错误。因为访问越界了!

91program
91program   Ds   Rxr 2016.01.31 13:38

建议你进入调试模式,看看具体是哪一行出错了,即是哪一行报的你所说的错误。
然后,分析这一行中使用的变量,看看是否有异常情况。

91program
91program 回复thf9527: OJ上有错,不能调试吗? 还是OJ有什么严格的要求,程序运行没有错,但是检测有错,说明可能是有隐藏的错误、或者不符合某些检测标准。
接近 2 年之前 回复
thf9527
thf9527 。。程序可以运行结果也对 没有报错
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!