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

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日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理