Lỗi "Exception thrown: write access violation. l.pTail was nullptr." khi code list 1 phân số

Exception thrown: write access violation. l.pTail was nullptr. list 1 phân số ai biết sữa sao chỉ mình với cảm ơn nhìu

#include<iostream>
#include<stdio.h>
using namespace std;
struct Phanso
{
	int tuso;
	int mauso;
	float ketqua;
};

struct node
{
	Phanso data;
	node *pNext;
};

struct list
{
	node *pHead;
	node *pTail;
};

void Khoitaolist(list &l)
{
	l.pHead = NULL;
	l.pTail = NULL;
}

node *Khoitaonode(Phanso &x)
{
	node *p = new node;
	if (p == NULL)
	{
		cout << "\nKo du bo nho";
		return NULL;
	}
	p->data.tuso = x.tuso;
	p->data.mauso = x.mauso;
	p->data.ketqua = x.ketqua;
	p->pNext = NULL;
	return p;
}

bool Isempty(list &l)
{
	if (l.pHead == NULL)
	{
		return true;
	}
	return false;
}

bool Addhead(list &l, Phanso &x)
{
	node *p = new node;
	p = Khoitaonode(x);
	if (Isempty(l))
	{
		l.pHead = p;
	}
	p->pNext = l.pHead;
	l.pHead = p;
	return true;
}

bool Addtail(list &l, Phanso &x)
{
	node *p = Khoitaonode(x);
	if (Isempty(l))
	{
		l.pHead = p;
	}
	l.pTail->pNext = p;
	l.pTail = p;
	return true;
}
void Nhap(list &l)
{
	int n;
	cout << "\nNhap so luong phan so: ";
	cin >> n;
	

	for (int i = 0; i < n; i++)
	{
		Phanso x;
		cout << "\nNhap Tu So: ";
		cin >> x.tuso;
		do
		{
			cout << "\nNhap mau so: ";
			cin >> x.mauso;
			if (x.mauso == 0)
			{
				cout << "\nMau so ko hop le ";
			}
		} while (x.mauso == 0);
		if (x.mauso < 0)
		{
			x.tuso *= -1;
			x.mauso *= -1;
		}
		x.ketqua = (float)x.tuso / x.mauso;
		Addtail(l, x);
	}
}
void Xuat(list &l)
{
	if (Isempty(l))
	{
		cout << "\nrong";
	}
	else
	{
		node *p = l.pHead;
		while (p!=NULL)
		{
			cout << "\t" << p->data.tuso << " / " << p->data.mauso;
			p = p->pNext;
		}
	}
	
}
void Menu(list &l)
{
	int choice;
	while (true)
	{
		system("cls");
		cout << "\n2.Phanso";
		cout << "\n0.Ket thuc";
		cout << "\n\n\n\tNhap lua chon: ";
		cin >> choice;
		if (choice == 2)
		{
			list l;
			Khoitaolist(l);
			Nhap(l);
			Xuat(l);
			system("pause");
		}
		if (choice == 0)
		{
			break;
		}
	}
}

void main()
{
	list l;
	Menu(l);
	system("pause");
}

l.pTail->pNext = p; có chắc là l.pTail khác NULL chưa mà đã gọi pNext?

2 Likes

à do lúc đầu add số đầu tiên vô mình ko gán giá trị cho pTail nên nó l.pTail vẫn là NULL
Phải sữa lại v mới đúng. cám ơn nhìu

bool Addtail(list &l, Phanso &x)
{
	node *p = Khoitaonode(x);
	if (Isempty(l))
	{
		l.pHead = p;
		l.pTail = p;
	}
	else
	{
		l.pTail->pNext = p;
		l.pTail = p;
	}
	
	return true;
}
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?