写了一个小程序,但会发生内存问题,看了好久,实在是找不出问题。。。
程序代码:
#include <stdio.h> #include <malloc.h> struct Student { int age; char name[70]; float score; }; void inputif(struct Student *pArr); void sort(struct Student *pArr,int len); void outputif(struct Student *pArr); int main(void) { struct Student student; inputif(&student); sort(&student,4); outputif(&student); getchar(); return 0; } void inputif(struct Student *pArr) { int i; pArr=(struct Student *)malloc(4*sizeof(struct Student)); //只需要类型所占的空间。 printf("请输入学生的信息:\n"); for(i=0;i<4;i++) { printf("请输入第%d个学生的信息:\n",i+1); printf("age="); scanf("%d",&pArr[i].age); printf("name="); scanf("%s",pArr[i].name); //pArr[i].name是数组名,即为一个地址,不用加&。 printf("score="); scanf("%f",&pArr[i].score); printf("\n\n"); fflush(stdin); } printf("\n\n"); } void sort(struct Student *pArr,int len) //冒泡排序 { struct Student t; int i,j; for(i=0;i<len-1;i++) { for(j=0;j<len-1-i;j++) { if(pArr[j].score>pArr[j+1].score) { t=pArr[j]; pArr[j]=pArr[j+1]; pArr[j+1]=t; //编译程序提示问题出现在这里,但是我看不出来啊 } } } } void outputif(struct Student *pArr) { int i; printf("按成绩升序排序后的学生信息为:\n"); for(i=0;i<4;i++) { printf("第%d个学生的信息:\n",i+1); printf("age=%d",pArr[i].age); printf("name=%s",pArr[i].name); printf("score=%f",pArr[i].score); printf("\n\n"); } }