怎么解决无效内存引用 C语言

2025-04-23 14:47:15
推荐回答(2个)
回答1:

  1. 无效内存引用是程序运行时的错误(runtime error),一般都和内存访问和操作有关系。

  2. 要解决这个错误,就需要仔细检查程序是否出现了错误的内存访问或者操作,需要一步一步仔细debug程序,错误的原因往往是一字之差。

  3. 常见无效内存引用错误的原因:

    1、数组越界
    2、内存未分配成功,却使用
    3、内存分配成功,但未初始化
    4、使用已经释放了的内存
    5、操作空指针,野指针


回答2:

#include "stdio.h"
#include "string.h"

void main()
{
char name[10][20];
int mark[10],i,j,n,a[10];
printf("输入学生人数:");
scanf ("%d",&n);
for (i = 0;i < n;i++)
{
printf("输入第%d个学生的姓名和成绩:",i+1);
getchar();
for (j = 0;;j++)
{
scanf ("%c",&name[i][j]);
if (name[i][j] == ',')
{//这里稍微改一下,保存成字符串,就不会出现内存问题了
//出内存问题是因为后面的strcpy()函数需要的参数是字符串。
name[i][j] = '\0';
break;
}
}
//a[i] = j;//改成字符串,这里就不惜要保存姓名长度了
scanf ("%d",&mark[i]);
}
//下面的排序过程,我做了些变动
for(i=0;i a[i]=i;

for (i = 0;i < n-1;i++)
{
for(j=0;j {
int temp;

if(mark[j] {//交换成绩
temp=mark[j];
mark[j]=mark[j+1];
mark[j+1]=temp;
//交换名字的下标
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}

for (i=0; i {//这里输出%s就可以了
//名字的下标值用a[i]的值
printf ("%s ",name[a[i]]);
printf ("%d\n",mark[i]);
}
getchar();
}