Chào mọi người. Em có một vấn đề liên quan đến toán tử trỏ trong mảng động với struct cần mọi người giúp đỡ ạ.
Yêu cầu của bài là dùng mảng động struct, và toán tử ->
, không dùng string
.
Phần code cho sẵn gồm có struct Date, struct Employee
và hàm main
gồm biến n
là số lượng Employee
và Employee *e
là cách khai báo mảng struct cho trước như thế!
Bài làm của em:
#include <iostream>
using namespace std;
struct date {
int dd, mm, yyyy;
};
struct employee {
char* hoten;
date ngayvaolam;
float hesoluong;
};
void inputdate(date& d)
{
cin >> d.dd >> d.mm >> d.yyyy;
}
employee inputaemployee()
{
employee *p = new employee();
p->hoten = new char[31];
cin.ignore();
cin.getline(p->hoten, 31);
inputdate(p->ngayvaolam);
cin >> p->hesoluong;
return *p;
}
void inputlistemployee(employee *e[], int numofemployee)
{
for (int i = 0; i < numofemployee; i++)
{
employee *a = new employee();
//e[i] = inputaemployee();
cin.ignore();
a->hoten = new char[31];
cin.getline(a->hoten, 31);
inputdate(a->ngayvaolam);
cin >> a->hesoluong;
e[i] = a;
}
}
void printdate(date d) {
(d.dd < 10) ? cout << 0 << d.dd << "/" : cout << d.dd << "/";
(d.mm < 10) ? cout << 0 << d.mm << "/" << d.yyyy : cout << d.mm << "/" << d.yyyy;
}
void swap1(employee *&e1, employee *&e2)
{
char* name = new char[31];
date d;
float hs;
name = e1->hoten;
d = e1->ngayvaolam;
hs = e1->hesoluong;
e1->hoten = e2->hoten;
e1->ngayvaolam = e2->ngayvaolam;
e1->hesoluong = e2->hesoluong;
e2->hesoluong = hs;
e2->hoten = name;
e2->ngayvaolam = d;
}
void sortincreasingbysalary(employee *e[], int numofemployee)
{
for (int i = 0; i < numofemployee - 1; i++)
for (int j = i + 1; j < numofemployee; j++)
{
if (e[i]->hesoluong > e[j]->hesoluong)
swap1(e[i], e[j]);
}
}
void printlistemployee(employee *e[], int numofemployee)
{
for (int i = 0; i < numofemployee; i++)
{
cout << e[i]->hoten << endl;
printdate(e[i]->ngayvaolam);
cout << endl << e[i]->hesoluong << endl;
}
}
int main() {
int numofemployee = 0; cin >> numofemployee;
employee *e = new employee[numofemployee];
inputlistemployee(&e, numofemployee);
sortincreasingbysalary(&e, numofemployee);
printlistemployee(&e, numofemployee);
delete[] e;
//system("pause");
return 0;
}
Lỗi em gặp phải là Stack around the variable 'e' was corrupted
.
Lần đầu em post bài nên nếu có sai sót, mọi người bỏ qua cho ạ. Xin cảm ơn mọi người!