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
realloc
có giá trị trả về là có lí do http://en.cppreference.com/w/c/memory/realloc để ýptr
chỉ 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
realloc
thì sẽ có khả năng vùng nhớ cũ ko thể mở rộng nữa và phải thay thế, lúc nàyrealloc
sẽ 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à