01/10/2018, 15:21
Xin trợ giúp cấp phát động mảng cấu trúc trong C
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() != '
' && 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
");
printf("---------------------------------------------------------------------------
");
printf("|%5s|%-25s|%7s|
", "MSSV", "Ho va ten", "Diem Tb");
printf("---------------------------------------------------------------------------
");
for (int i = 0; i < *n; i++)
{
printf("|%5d|%-25s|%7.2f|
", hs[i].id, hs[i].name, hs[i].p);
printf("---------------------------------------------------------------------------
");
}
}
int main()
{
hocsinh *hs;
int n;
hs = (hocsinh*)malloc(sizeof(hocsinh));
Nhap(hs, &n);
Xuat(hs, &n);
free(hs);
_getch();
return 0;
}
Bài liên quan





Hàm
realloccó giá trị trả về là có lí do http://en.cppreference.com/w/c/memory/realloc để ýptrchỉ là trỏ cấp 1 thôi.Là sao bạn? Mình chưa hiểu lắm
Khi cần một vùng nhớ lớn hơn qua
reallocthì sẽ có khả năng vùng nhớ cũ ko thể mở rộng nữa và phải thay thế, lúc nàyreallocsẽ trả về một vùng nhớ khác. Bạn phải sử dụng con trỏ được trả về này.mình sửa lại như vầy nó vẫn báo lỗi
Thiếu
<stdlib>rồi. Vả lại không cần ép kiểu cho malloc calloc realloc.trên visual không ép kiểu nó báo lỗi bạn ơi, với lại mình có
<malloc.h>rồi mà