local variable 'a' used without having been initialized 怎么办?
#include"stdio.h"#include"stdlib.h"#defineM100voidmain(){int(*a)[7],i,n1=0,n2=0,l1=0,...
#include "stdio.h"
#include"stdlib.h"
#define M 100
void main()
{
int (*a)[7],i,n1=0,n2=0,l1=0,l2=0;
FILE *fp;
fp=fopen("student.dat","r+");
for(i=0;i<M;i++)
fread(*a+i,14,1,fp);
for(i=0;i<M;i++)
{
if(*(*(a+i)+3)==1)
{ if(*(*(a+i)+4)==1) n1++;
else if(*(*(a+i)+4)==2) l1++;
}
else if(*(*(a+i)+3)==2)
{ if(*(*(a+i)+4)==1) n2++;
else if(*(*(a+i)+4)==2) l2++;
}
printf("一班男生%d:一班女生%d\n",n1,l1);
printf("二班男生%d:二班女生%d\n",n1,l1);
}
} 展开
#include"stdlib.h"
#define M 100
void main()
{
int (*a)[7],i,n1=0,n2=0,l1=0,l2=0;
FILE *fp;
fp=fopen("student.dat","r+");
for(i=0;i<M;i++)
fread(*a+i,14,1,fp);
for(i=0;i<M;i++)
{
if(*(*(a+i)+3)==1)
{ if(*(*(a+i)+4)==1) n1++;
else if(*(*(a+i)+4)==2) l1++;
}
else if(*(*(a+i)+3)==2)
{ if(*(*(a+i)+4)==1) n2++;
else if(*(*(a+i)+4)==2) l2++;
}
printf("一班男生%d:一班女生%d\n",n1,l1);
printf("二班男生%d:二班女生%d\n",n1,l1);
}
} 展开
展开全部
这句提示的意思是,局部变量a使用时未被初始化。
C语言将局部变量放在栈中,即在函数入口处添加一句指令subl $xx, %esp来上移栈顶指针,为局部变量流出空间。而系统管理栈,只有push压入、pop弹出两种基本操作,pop弹出之后不会将那块区域的内容清零,所以说局部变量的值是不确定的,因为栈中那块地方之前可能经历过几次压入而被改写。
解决办法,就是在使用前,给a一个确定的值,让他指向一块确定的可访问的内存区域。可以使用malloc来分配一块堆内存给a:
a = malloc (sizeof(int) * 7);
这样写的话,需要在a使用完毕后,调用free函数回收这块堆内存。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询