01/10/2018, 15:24

Code bị lỗi "Exception thrown: read access violation."

Mọi người giúp e sửa lỗi này với ạ, làm sao để xuất list trong 1 cây nhị phân!!!
E có cây nhị phân trong đó có chứa 1 danh sách liên kết đơn, lúc e nhập xong rồi thì e xuất thông tin trên cây nhị phân ko được và nó bào lỗi “Exception thrown: read access violation._
_t->dg.listmuontra was 0xCDCDCDCD. occurred”_ ở dòng p = t->dg.listmuontra->pHead;
trong khi đó e xuất riêng list đó thì vẫn được.
code của e, mong mọi người giúp e với, e đang làm bài tập lớn, e đã tìm hiểu rồi mới đăng lên hỏi ạ.
e cám ơn ạ!!!

#include<string.h>
using namespace std;
#define MaxList 200
//Danh mục sách
struct DANHMUCSACH 
{
	int MaSach;
	int TrangThai;
	int ViTri;
};
typedef struct DANHMUCSACH DMS;
struct NODEDANHMUCSACH
{
	DMS dms;
	NODEDANHMUCSACH *pNext;
};
typedef NODEDANHMUCSACH NodeDMS;
struct LISTDANHMUCSACH
{
	NodeDMS *pHead;
	NodeDMS *pTail;
};
typedef struct LISTDANHMUCSACH LISTDMS;
//Khởi tạo List Danh mục sách
void InitLISTDMS(LISTDMS &list)
{
	list.pHead = NULL;
	list.pTail = NULL;
}
//Đầu sách
struct DAUSACH 
{
	int ISBN;
	char TenSach[100];
	int SoTrang;
	char TacGia[50];
	int NamXB;
	char TheLoai[50];
	LISTDMS *ListDMS;
};

// Danh sách mượn trả
struct MUONTRA
{
	int MaSach;
	char NgayMuon[15];
	char NgayTra[15];
	int TrangThai;

};
typedef struct MUONTRA MuonTra;

struct NODEMUONTRA
{
	MuonTra muontra;
	NODEMUONTRA *pNext;
};

typedef struct NODEMUONTRA NodeMuonTra;
struct LISTMUONTRA
{
	NodeMuonTra *pHead;
	NodeMuonTra *pTail;
};
typedef struct LISTMUONTRA ListMuonTra;
// khởi tạo danh sách mượn trả ban đầu
void InitListMuonTra(ListMuonTra &list)
{
	list.pHead = NULL;
	list.pTail = NULL;
}


NodeMuonTra *CreateMT(int ms, char *nm, char *nt, int tt)
{
	NodeMuonTra *p = new NodeMuonTra;
	if (p == NULL)
		exit(1);
	else
	{
		p->muontra.MaSach = ms;
		strcpy_s(p->muontra.NgayMuon, nm);
		strcpy_s(p->muontra.NgayTra, nt);
		p->muontra.TrangThai = tt;
		p->pNext = NULL;

	}
	return p;
}

void AddMuontra(ListMuonTra &l, NodeMuonTra *p)
{
	if (l.pHead == NULL)
	{
		l.pHead = l.pTail = p;
	}
	else
	{
		l.pTail->pNext = p;
		l.pTail = p;
	}
}
//Danh sách độc giả
struct DOCGIA
{
	int MaDG;
	char Ho[10];
	char Ten[15];
	char Phai[5];
	int trangthai;
	ListMuonTra *listmuontra;
};
typedef struct DOCGIA DocGia;
struct NODEDOCGIA
{
	DocGia dg;
	struct NODEDOCGIA *pLeft;
	struct NODEDOCGIA *pRight;
};
typedef struct NODEDOCGIA NodeDocGia;
typedef NodeDocGia* TREEDocGia;
// Khởi tại tree đọc giả
void InitTreeDocGia(TREEDocGia &t)
{
	t = NULL;
}
void *CreateDG(DocGia *&dg,int mdg, char *ho, char *ten, char *phai, int tt, ListMuonTra *l)
{
	//DocGia *dg;
	dg = new DocGia;
	if (dg == NULL) exit(1);
	else
	{
		dg->MaDG = mdg;
		strcpy_s(dg->Ho, ho);
		strcpy_s(dg->Ten, ten);
		strcat_s(dg->Phai, phai);
		dg->trangthai = tt;
		dg->listmuontra->pHead = l->pHead;
		dg->listmuontra->pTail = l->pTail;
	}
}
// Thêm đọc giả vào cây
void AddNDG(TREEDocGia &t,DocGia q)
{
	if (t == NULL)
	{
		NodeDocGia *d = new NodeDocGia;
		/*d->dg.MaDG = q.MaDG;
		strcpy_s(d->dg.Ho, q.Ho);
		strcpy_s(d->dg.Ten, q.Ten);
		strcpy_s(d->dg.Phai, q.Phai);
		d->dg.trangthai = q.trangthai;*/
		d->dg = q;
		d->pLeft = NULL;
		d->pRight = NULL;
		t = d;
	}
	else {
		if (t->dg.MaDG > q.MaDG)
		{
			AddNDG(t->pLeft, q);
		}
		else { if (t->dg.MaDG < q.MaDG)
			AddNDG(t->pRight, q);
		}
	}
}
void Xuatlist(ListMuonTra l)
{

	NodeMuonTra *p = new NodeMuonTra;
	p = l.pHead;
	while (p != NULL)
	{
		cout << "
Ma sach: " << p->muontra.MaSach;
		cout << "
Ngay muon: " << p->muontra.NgayMuon;
		cout << "
Ngay tra: " << p->muontra.NgayTra;
		cout << "
Trang thai: " << p->muontra.TrangThai;
		p = p->pNext;
	}

}
//xuất các đọc giả
void XuatDG(TREEDocGia t)
{
	if (t != NULL)
	{
		cout << "
Ma doc gia: " << t->dg.MaDG;
		cout << "
Ho doc gia: " << t->dg.Ho;
		cout << "
Ten doc gia: " << t->dg.Ten;
		cout << "
Phai: " << t->dg.Phai;
		cout << "
Trang thai the: " << t->dg.trangthai;
		cout << "
Danh sach muon tra: 
";
		NodeMuonTra *p = new NodeMuonTra;
		p = t->dg.listmuontra->pHead;
		while (p != NULL)
		{
			cout << "
Ma sach: " << p->muontra.MaSach;
			cout << "
Ngay muon: " << p->muontra.NgayMuon;
			cout << "
Ngay tra: " << p->muontra.NgayTra;
			cout << "
Trang thai: " << p->muontra.TrangThai;
			p = p->pNext;
		}
		XuatDG(t->pLeft);
		XuatDG(t->pRight);
	}
}
void NhapDG(DocGia *&dg)
{
	int mdg, tt,x;
	int ms, tt2;
	char ngaytra[15], ngaymuon[15];
	char ho[30], ten[30], phai[5];
	dg = new DocGia;
	ListMuonTra l;
	InitListMuonTra(l);
	cout << "Nhap ma DG:"; cin >> mdg;
	dg->MaDG = mdg; 
	cin.ignore();
	cout << "Nhap Ho doc gia: "; cin.getline(ho, 30);
	strcpy_s(dg->Ho, ho);
	cout << "Nhap ten doc gia:"; cin.getline(ten, 30);
	strcpy_s(dg->Ten, ten);
	cout << "Nhap Phai: "; cin.getline(phai, 5);
	strcpy_s(dg->Phai, phai);
	cout << "Trang thai the: "; cin >> tt;
	dg->trangthai = tt;
	cout << "Nhap danh sach muon tra, ket thuc bang so 0:";
		do {
			cout << "Nhap ma sach: "; cin >> ms;
			cin.ignore();
			cout << "Nhap ngay muon: "; cin.getline(ngaymuon, 15);
			cout << "Nhap ngay tra:"; cin.getline(ngaytra, 15);
			cout << "Nhap trang thai: "; cin >> tt2;
			NodeMuonTra *p = CreateMT(ms, ngaymuon, ngaytra, tt2);
			AddMuontra(l, p);
			cout << "
tiep tuc nhap bam <>0
"; cin >> x;
		} while (x != 0);
}
// hàm main
int main()
{
	TREEDocGia t;
	DocGia *dg=new DocGia;
	InitTreeDocGia(t);	
	NhapDG(dg);
	AddNDG(t, *dg);
	XuatDG(t);
	system("pause");
	return 0;
}
Nguyễn Dương viết 17:37 ngày 01/10/2018

mọi người giup e vs ạ

*grab popcorn* viết 17:35 ngày 01/10/2018

Hàm này cso được gọi đâu?
CreateDG

Nguyễn Dương viết 17:38 ngày 01/10/2018

à cái hàm đó e đã thay thành hàm NhapDG rồi ạ, e quên xóa cái đó

*grab popcorn* viết 17:29 ngày 01/10/2018

Vậy bạn đã viết lại hết nội dung của hàm CreateDG trong hàm NhapDG chưa?
Tại mình thấy thiếu phần gán list… gì kìa

Nguyễn Dương viết 17:27 ngày 01/10/2018

à e có thiếu 2 dòng gán vào, thêm vào thì nó thành ra thế nạy ạ
https://sv1.uphinhnhanh.com/images/2018/04/15/Untitledfe419.png

*grab popcorn* viết 17:32 ngày 01/10/2018

Đặt breakpoint và debug thôi
In ra xem dg->listmuontra nó có giá trị gì?
Và nhớ lại lời rogp10 dặn ở topic trc nhé.

Nguyễn Dương viết 17:30 ngày 01/10/2018

Dạ vâng e cám ơn ạ , chắc e sẽ hỏi tiếp nếu sau có lỗi quá

Bài liên quan
0