使用realloc C扩展结构数组

时间:2018-11-15 11:51:03

标签: c

每次入队时,我都尝试将数组的大小扩大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 

1 个答案:

答案 0 :(得分:1)

realloc(s, size*(sizeof(Student)) );必须为realloc(arr, size*(sizeof(Student)) );sNULL!)。

然后,您永远不会将新分配的数组返回给调用方:

arr = temp不会更改传入的指针。您需要一个指向该指针的指针以返回新值,例如

void Enqueue(Student **arr ,  int index){
...
  *arr = temp;
...
}

或仅返回新数组:

Student* Enqueue(Student *arr, int index) {
...
return temp;
}

然后还有@WhozCraig提到的其他内存管理错误。