Chào mọi người, mình vừa học C được vài tháng. Có một bài tập là tạo một danh sách sinh viên bằng con trỏ cấp phát động. Code của mình khi nhập người thứ nhất thì bình thường nhưng khi nhập người thứ 2 thì nó báo lỗi ở dòng realloc… mình không sửa được chỗ đó, các bạn giúp mình với.
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
typedef struct
{
int id;
char name[50];
float p;
}hocsinh;
//Ham nhap du lieu sinh vien
void Nhap(hocsinh *hs, int *n)
{
int ms = 0;
int i = 0;
while (ms != -1)
{
printf("Nhap vao MSSV. Nhap -1 de ket thuc: ");
scanf_s("%d", &ms);
if (ms != -1)
{
hs[i].id = ms;
while (getchar() != '\n' && getchar() != EOF) {}
printf("Ho va ten: ");
gets_s((hs[i].name));
printf("Diem Trung Binh: ");
scanf_s("%f", &hs[i].p);
i++;
realloc(hs, sizeof(hocsinh) * (i+1));
}
}
*n = i;
}
void Xuat(hocsinh *hs, int *n)
{
printf(" Thong Tin Sinh Vien \n");
printf("---------------------------------------------------------------------------\n");
printf("|%5s|%-25s|%7s|\n", "MSSV", "Ho va ten", "Diem Tb");
printf("---------------------------------------------------------------------------\n");
for (int i = 0; i < *n; i++)
{
printf("|%5d|%-25s|%7.2f|\n", hs[i].id, hs[i].name, hs[i].p);
printf("---------------------------------------------------------------------------\n");
}
}
int main()
{
hocsinh *hs;
int n;
hs = (hocsinh*)malloc(sizeof(hocsinh));
Nhap(hs, &n);
Xuat(hs, &n);
free(hs);
_getch();
return 0;
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?