阿白| 2022-08-13 15:43 采纳率: 91.7%
浏览 243
已结题

C++使用qsort时发生异常: std::bad_alloc

异常:
0x00007FFE65F7474C 处(位于 EmployeePayrollManagementSystem.exe 中)有未经处理的异常: Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x0000005EDECFDA30 处。

刚入坑,第一次遇到这个异常,且使用qsort次数不多,不熟练,不知如何处理。
问题应该主要在于qsort中的比较函数,在向比较函数中传参时失败:

img

问题部分代码:
排序函数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;
    }
};


  • 写回答

2条回答 默认 最新

  • 烟雨龙升 2022-08-13 16:23
    关注

    这样写,话说sort不香吗?

    
    qsort(&arr[0],arr.size(),sizeof(int), compare);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月13日
  • 已采纳回答 8月13日
  • 修改了问题 8月13日
  • 创建了问题 8月13日

悬赏问题

  • ¥15 学校优化算法sbo和蚁群算法怎么结合
  • ¥20 Apache poi使用问题
  • ¥21 matlab怎么求时域信号的二阶导数
  • ¥15 判断两个表是否完全相同
  • ¥15 java map类型数据格式,如何快速通过前缀匹配元素
  • ¥15 stc12c5a60s2、QMC5883L、LCD1602组合测量磁场所需程序
  • ¥20 Win11测试yolov4,“找不到nvcuda.dll”怎么办?
  • ¥15 simulink绘制bode图
  • ¥15 php_network_getaddresses: getaddrinfo failed: Name or service not known
  • ¥15 用msg发消息出现的问题