提示:不能使用指针pcarinfo将已分配的内存区域释放,因为此时由于for循环内pcarinfo做自增运算,其所指位置已不再是动态分配内存的首地址了,因此必须使用pcarinfo释放动态分配的内存。
#include
#include
struct carinfo
{
float displacement;
float price;
float type[20];
char carname[30];
char rc[30];
};
int main()
{
unsigned int i,j=0;
struct carinfo *pcarinfo,*pcarinfocopy;
i=sizeof(struct carinfo);
printf("结构体carinfo占的字节数为:%u\n",i);
pcarinfo=(struct carinfo*)malloc(i*100);//分配100个carinfo结构体类型内存区域
pcarinfocopy=pcarinfo; //记录内存区域首地址
printf("开始输入汽车信息:\n");
for(j=0;jcarname);
printf("No.%u车型:",j+1);
scanf("%s",pcarinfo->type);
printf("No.%u车牌号:",j+1);
scanf("%s",pcarinfo->rc);
printf("No.%u价位:",j+1);
scanf("%s",pcarinfo->price);
printf("No.%u排量:",j+1);
scanf("%s",pcarinfo->displacement);
parinfo++;
}
printf("output all car's info\n");
pcarinfo=pcarinfocopy;
for(j=0;jcarname);
printf("No.%u car's车型:%s",j+1,pcarinfo->type);
printf("No.%u car's车牌号:%s",j+1,pcarinfo->rc);
printf("No.%u car's价位:%s",j+1,pcarinfo->price);
printf("No.%u car's排量:%s",j+1,pcarinfo->displacement);
parinfo++;
}
free(pcarinfocopy); //释放动态分配内存区域
}