Chào mọi người, mình đang làm bài dslk đơn quản lí danh sách hình chữ nhật, trên onlinegdb.com thì chạy tốt nhưng VS 2017 và 2013 đều lỗi khi đang xử lí trên console, debug thì ra thì báo lỗi Access violation reading location 0x00008137 tại hàm Delete. Mọi người xem giúp mình với, cảm ơn.
#include <iostream>
using namespace std;
struct Diem
{
int x, y;
};
typedef Diem DIEM;
struct HinhChuNhat
{
Diem Tren;
Diem Duoi;
int DienTich = 0;
};
typedef HinhChuNhat HCN;
void NhapDiem(Diem &x)
{
cout << "\nNhap toa do x: ";
cin >> x.x;
cout << "Nhap toa do y: ";
cin >> x.y;
}
void DienTich(HCN &a)
{
int AB = a.Tren.y - a.Duoi.y;
if (AB < 0)
AB *= -1;
int BC = a.Tren.x - a.Duoi.x;
if (BC < 0)
BC *= -1;
int S = AB * BC;
a.DienTich = S;
}
void NhapHCN(HCN &x)
{
cout << "\nNhap hinh chu nhat: " << endl << endl;
cout << "Nhap diem tren: ";
NhapDiem(x.Tren);
cout << "\nNhap diem duoi: ";
NhapDiem(x.Duoi);
DienTich(x);
}
void XuatDiem(Diem a)
{
cout << "Diem (" << a.x << "," << a.y << ")" << endl;
}
void XuatHCN(HCN a)
{
cout << "\nHinh chu nhat: " << endl;
XuatDiem(a.Tren);
XuatDiem(a.Duoi);
cout << "Dien tich: " << a.DienTich << endl;
}
struct node
{
HCN a;
struct node *pNext;
};
typedef node NODE;
struct list
{
NODE *pHead;
NODE *pTail;
};
typedef list LIST;
void creatLIST(LIST &l)
{
l.pHead = l.pTail = NULL;
}
NODE *creatNode(HCN e)
{
NODE *p = new NODE;
if (p == NULL)
{
return NULL;
}
p->a = e;
p->pNext = NULL;
return p;
}
void addTail(LIST &l, node *p)
{
if (l.pHead == NULL)
{
l.pHead = l.pTail = p;
}
else
{
l.pTail->pNext = p;
l.pTail = p;
}
}
void input(LIST &l, int n)
{
creatLIST(l);
for (int i = 1; i <= n; i++)
{
HCN x;
NhapHCN(x);
NODE *p = creatNode(x);
addTail(l, p);
}
}
void output(LIST l)
{
for (NODE *p = l.pHead; p != NULL; p = p->pNext)
{
XuatHCN(p->a);
cout << endl;
}
cout << endl;
}
void TimMax(LIST l)
{
int max = l.pHead->a.DienTich;
for (NODE *p = l.pHead->pNext; p != NULL; p = p->pNext)
{
if (p->a.DienTich > max)
max = p->a.DienTich;
}
for (NODE *p = l.pHead; p != NULL; p = p->pNext)
{
if (p->a.DienTich == max)
{
cout << "HCN co dien tich lon nhat: " << endl;
XuatHCN(p->a);
}
}
cout << endl;
}
void Swap(NODE *&p, NODE *&k)
{
NODE *temp = new NODE;
temp->a = p->a;
p->a = k->a;
k->a = temp->a;
}
void Sort(LIST &l)
{
cout << "Sap xep danh sach theo do lon Dien tich: " << endl;
for (NODE *p = l.pHead; p != l.pTail; p = p->pNext)
{
for (NODE *j = l.pHead->pNext; j != NULL; j = j->pNext)
{
if (p->a.DienTich > j->a.DienTich)
{
Swap(p, j);
}
}
}
}
void Delete(LIST &l, int x) {
int dem = 0;
for (NODE *j = l.pHead; j != NULL; j = j->pNext) //**Bao loi o day**
{
if (j->a.DienTich == x)
{
for (NODE *p = l.pHead; p != NULL; p = p->pNext)
{
if (p->pNext == j)
{
p->pNext = j->pNext;
cout << "co dien tich" << endl;
delete j;
dem++;
}
}
}
}
if (dem == 0)
cout << "Khong tim thay HCN can xoa!" << endl << endl;
else
cout << "Da xoa HCN." << endl << endl;
}
int main()
{
int n, r;
cout << "Nhap n: ";
cin >> n;
LIST l;
input(l, n);
output(l);
TimMax(l);
Sort(l);
output(l);
cout << "Nhap dien tich HCN can xoa: ";
cin >> r;
Delete(l, r);
output(l);
system("pause");
return 0;
}