Cấp phát mảng động

Em có thắc về cấp phát mạng động c++,ở c++ thì ta ko thể mở rộng trực tiếp đc số lượng của mảng động a mà phải tạo thêm 1 mảng b nữa để sao chép rồi giải phóng mảng a rồi mới mở rộng ra nhưng nếu đọc file bằng eof thì lại ko cần đến cái này
Mọi người giải thích giúp em với ạ

#include<iostream.h>
#include<fstream.h>
struct Hokhau
{
	char ma[5];
	char ten[10];
	int so_nguoi;
		
};
void doc_file(Hokhau *a,int &n)
{
	fstream f;
	f.open("hk.txt",ios::in);
	if(!f)
	{
		cout<<"\nKhong mo dc tep"<<endl;
		exit(1);
	}
	n=0;
	while(!f.eof())
	{
		f>>a[n].ma>>a[n].ten>>a[n].so_nguoi;
	
		n++;
	
	}
	f.close();
	
	
}
void xuat(Hokhau *a,int n)
{
	for(int i=0;i<n;i++)
	{
		
		
		cout<<a[i].ma<<"\t"<<a[i].ten<<"\t"<<a[i].so_nguoi<<endl;
	}
}
int main()
{
	Hokhau *a;
	int n;
	a=new Hokhau[n];

	doc_file(a,n);
	xuat(a,n);
}

Mình lại có thắc mắc khác, trước cả thắc mắc của bạn.
Cái gì đây:

Ý mình là n đang có giá trị bao nhiêu?

2 Likes

giá trị n chưa có anh ạ
em đọc file ko có số lượng bằng eof

Chưa có giá trị mà dám khởi tạo mảng có chưa có giá trị phần tử.

1 Like

Là sao ạ?
file ko có số lượng nhất định mà em muốn dùng cấp phát mảng động thì làm kiểu gì ạ
code em vẫn chạy nhưng em ko hiểu cách hoạt động của nó ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?