C++Runtime Error (ACCESS_VIOLATION)

不知道哪里写错了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;
}

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

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

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

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

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

仔细又看了一次

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

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

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

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