每次入队时,我都尝试将数组的大小扩大1
一个新学生,它确实工作了,但问题是它的名称和id都用了垃圾值,请您能帮我为什么会这样,
谢谢 。
void Enqueue(Student *arr , int index){
Student *s = NULL ;
int size = index + 1 ;
Student *temp = (Student*)realloc(s, size*(sizeof(Student)) );
if (temp == NULL){
printf("Can not allocate memory !!! \n") ;
return ;
}
else
arr = temp ;
char Name[10] ; int Id ;
printf("please enter student name : \n");
scanf("%s" , Name);
arr[size].name = Name ;
printf("please enter student ID : \n");
scanf("%d" , &Id);
arr[size].id = Id ;
return ;
}
这是运行:
Student(5) Name :H�� H9�u�H�[]A\A]A^A_Ðf. �
Student(5) ID : 1
答案 0 :(得分:1)
realloc(s, size*(sizeof(Student)) );
必须为realloc(arr, size*(sizeof(Student)) );
(s
为NULL
!)。
然后,您永远不会将新分配的数组返回给调用方:
arr = temp
不会不更改传入的指针。您需要一个指向该指针的指针以返回新值,例如
void Enqueue(Student **arr , int index){
...
*arr = temp;
...
}
或仅返回新数组:
Student* Enqueue(Student *arr, int index) {
...
return temp;
}
然后还有@WhozCraig提到的其他内存管理错误。