提问者:小点点

C++中使用max_element时的分割错误


根据其他建议,取消引用可能会出现问题,但我在调用max_element函数时甚至在取消引用之前就出现了分段错误。

最小可复制示例:

#include <bits/stdc++.h>
using namespace std;

class B
{
    public:
    int a, b;
    int getA()
    {
        return a;
    }
    int getB()
    {
        return b;
    }
};
class A
{
    public:
    vector<B> array;
    A()
    {
        array.resize(5);
        array[0].a = array[0].b = 3;
        array[1].a = array[1].b = 5;
        array[2].a = array[2].b = 7;
        array[3].a = array[3].b = 1;
        array[4].a = array[4].b = 2;
    }
    vector<B> getArray()
    {
        return array;
    }
};

int main()
{
    A aobj;
    B maxE = *std::max_element(aobj.getArray().begin(), aobj.getArray().end(),
        [](B jobA, B jobB) {
        return jobA.getA() < jobB.getA();
    });
    
    cout<<maxE.getA();
    return 0;
}

共1个答案

匿名用户

a的成员函数

    vector<B> getArray()

返回成员变量数组的副本。调用它两次将生成两个独立的副本,因此将它们与std::max_element一起使用是危险的。

应该让函数返回对成员变量array的引用。

    vector<B>& getArray() // add &

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|max_element|分割)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?