经常出现无效内存引用,不知道什么原因(注,学校改题的编译器可能是很旧的版本),想请高手说一下一般是出了什么问题
高手帮我看下下面这个题目,怎么解决无效内存引用的问题
大家参加了期末考试,成绩出来后老师要对 n 个学生进行成绩汇总和排序。要求程序按成绩降序进行排序。在排序过程中对于成绩相同的学生,要按照输入数据的顺序进行排列。例如:有5名学生的成绩:
zhang1,90
zhang2,91
zhang3,99
zhang4,91
zhang5,98
则排序结果应该为:
zhang3,99
zhang5,98
zhang2,91
zhang4,91
zhang1,90
请注意例题中“zhang2”和“zhang4”的排列顺序。
输入:
第一行为将要输入的学生数量n
从第二行起后面连续 n 行数据,每行为一名学生的姓名(长度不超过20个字符,不包括空格),考试成绩(int)
输出:
排序后的结果。每行为一名学生的姓名和成绩。
以下是我程序
main()
{
char name[10][20],t[20];
int mark[10],i,j,n,k,h,a[10],max;
scanf ("%d",&n);
for (i = 0;i < n;i++)
{
for (j = 0;;j++)
{
scanf ("%c",&name[i][j]);
if (name[i][j] == ',') break;
}
a[i] = j;
scanf ("%d",&mark[i]);
}
for (i = 0;i < n -1;i++)
{
max = 0;
k = 0;
for (j = i ;j < n;j++)
{
if (mark[j] > max)
{
max = mark[j];
k=j;
}
}
if (k!=i)
{
strcpy (t,name[k]);
h = mark[k];
for (j = k;j>i;j--)
{
strcpy (name[j],name[j-1]);
mark[j] = mark[j-1];
}
strcpy (name[i],t);
mark[i] = h;
}
}
for (i = 0;i < n;i++)
{
for (j = 1;j <= a[i];j++)
{
printf ("%c",name[i][j]);
}
printf ("%d\n",mark[i]);
}
getch();
}
谢谢了!
分可能不够,你需要我追加多少可以说话哈!
无效内存引用是程序运行时的错误(runtime error),一般都和内存访问和操作有关系。
要解决这个错误,就需要仔细检查程序是否出现了错误的内存访问或者操作,需要一步一步仔细debug程序,错误的原因往往是一字之差。
常见无效内存引用错误的原因:
1、数组越界
2、内存未分配成功,却使用
3、内存分配成功,但未初始化
4、使用已经释放了的内存
5、操作空指针,野指针