异常:
0x00007FFE65F7474C 处(位于 EmployeePayrollManagementSystem.exe 中)有未经处理的异常: Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x0000005EDECFDA30 处。
刚入坑,第一次遇到这个异常,且使用qsort次数不多,不熟练,不知如何处理。
问题应该主要在于qsort中的比较函数,在向比较函数中传参时失败:
问题部分代码:
排序函数sorts中截取的相关部分:(people类我放在最后面)
void sorts(std::vector<People>arr) {//部分无用参数我去掉了
qsort(&arr, arr.size(), sizeof(People), ascendingName);
}
相关的比较函数:
int ascendingName(const void* a, const void* b) {
People* t1 = (People*)a;
People* t2 = (People*)b;
return t1->getName() > t2->getName() ? 1 : -1;
}
People类:
class People
{
public:
typedef struct changedSalary {
std::string time;
std::string money;
}changedSalary;
private:
std::string name, sex, age, position, serviceLength, number, salary, positionOrder;
std::vector<changedSalary> cSalary;
public:
//构造器
People() {}
People(std::string name) {
setName(name);
}
People(std::string name, std::string number) {
setName(name); setNumber(number);
}
People(std::string name, std::string number, std::string salary) {
setName(name); setNumber(number); setSalary(salary);
}
People(std::string name, std::string number, std::string salary, std::string position) {
setName(name); setNumber(number); setSalary(salary); setPosition(position);
}
//名字
void setName(std::string name) {
this->name = name;
}
std::string getName() {
return name;
}
//性别
void setSex(std::string sex) {
this->sex = sex;
}
std::string getSex() {
return sex;
}
//年龄
void setAge(std::string age) {
this->age = age;
}
std::string getAge() {
return age;
}
//职位
void setPosition(std::string position) {
this->position = position;
}
std::string getPosition() {
return position;
}
//职位大小顺序
void setPositionOrder(std::string order) {
positionOrder = order;
}
std::string getPositionOrder() {
return positionOrder;
}
//工龄
void setServiceLength(std::string length) {
serviceLength = length;
}
std::string getServiceLength() {
return serviceLength;
}
//电话
void setNumber(std::string number) {
this->number = number;
}
std::string getNumber() {
return number;
}
//薪资
void setSalary(std::string salary) {
this->salary = salary;
}
std::string getSalary() {
return salary;
}
//薪资变化
void setChangedSalary(std::vector<changedSalary> changedSalary) {
cSalary = changedSalary;
}
std::vector<changedSalary> getChangedSalary() {
return cSalary;
}
};