C++错误(分段故障 /总线错误 /内存限制超过 /堆栈限制)使用functions lower_bound,排序,

发布于 2025-01-18 18:55:48 字数 1385 浏览 0 评论 0原文

我的程序在上传到学校测试服务器后崩溃,并宣布发生了这些错误之一(分段错误/总线错误/超出内存限制/超出堆栈限制),我没有确切的信息。如果我在调试器中运行该程序,我找不到任何东西。审核方法可能会失败。

整个程序https://onecompiler.com/cpp/3xy2j7dmd

class Company
{
    private:
        string name;
        string addr;
        string id;
        unsigned int totalIncome;
        unsigned int numberOrders;
        unsigned int amount;
};
bool Company::cmpNA (const Company &a, const Company &b) 
{
    if ( a.getName() < b.getName())
        return a.getName() < b.getName();
    
    return a.getAddr() < b.getAddr();
}
bool CVATRegister::audit ( const string &name, const string  &addr, unsigned int &sumIncome ) const
{
    Company cmp(name, addr,"-1");
    vector<Company> tmp = DCompany;

    sort(tmp.begin(), tmp.end(), [](const Company & a, const Company & b)
        { 
            if ( a.getName() < b.getName())
                return a.getName() < b.getName();
    
             return a.getAddr() < b.getAddr();
        });

    auto itr = lower_bound(tmp.begin(), tmp.end(), cmp, &Company::cmpNA);

    if(itr != tmp.end() && addr == itr->getAddr() && itr->getName() == name)
     {   
        sumIncome = itr->getTotalIncome(); 
        return true;
     }
     return false;
}

My program crashes after uploading to the school test server with the announcement that one of these errors has occurred (Segmentation fault / Bus error / Memory limit exceeded / Stack limit exceeded), I have no exact information. If I run the program in the debugger, I can't find anything. The audit method may fail.

The whole program https://onecompiler.com/cpp/3xy2j7dmd

class Company
{
    private:
        string name;
        string addr;
        string id;
        unsigned int totalIncome;
        unsigned int numberOrders;
        unsigned int amount;
};
bool Company::cmpNA (const Company &a, const Company &b) 
{
    if ( a.getName() < b.getName())
        return a.getName() < b.getName();
    
    return a.getAddr() < b.getAddr();
}
bool CVATRegister::audit ( const string &name, const string  &addr, unsigned int &sumIncome ) const
{
    Company cmp(name, addr,"-1");
    vector<Company> tmp = DCompany;

    sort(tmp.begin(), tmp.end(), [](const Company & a, const Company & b)
        { 
            if ( a.getName() < b.getName())
                return a.getName() < b.getName();
    
             return a.getAddr() < b.getAddr();
        });

    auto itr = lower_bound(tmp.begin(), tmp.end(), cmp, &Company::cmpNA);

    if(itr != tmp.end() && addr == itr->getAddr() && itr->getName() == name)
     {   
        sumIncome = itr->getTotalIncome(); 
        return true;
     }
     return false;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最近可好 2025-01-25 18:55:48

那种lambda不提供 严格的弱订购 按照std :: Sort的要求。 sort and lower_bound can can can can ber都会失败。

你的意思?

  sort(tmp.begin(), tmp.end(), [](const Company & a, const Company & b)
    { 
        if ( a.getName() != b.getName())
            return a.getName() < b.getName();

         return a.getAddr() < b.getAddr();
    });

That sort lambda doesn't provide strict weak ordering as required by std::sort. Both sort and lower_bound can/will fail.

Did you mean?

  sort(tmp.begin(), tmp.end(), [](const Company & a, const Company & b)
    { 
        if ( a.getName() != b.getName())
            return a.getName() < b.getName();

         return a.getAddr() < b.getAddr();
    });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文