【发布时间】:2021-06-13 20:26:10
【问题描述】:
根据其他建议,取消引用可能会出现问题,但我在调用 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;
}
【问题讨论】:
-
应该是
std::vector<B>& getArray(){ return array; } -
阅读参考。
-
但是为什么我得到分段错误
-
你访问被破坏的临时元素,即使生命周期被延长,你也会使用 2 个不同的容器来限制,所以你会有越界访问。
标签: c++ vector lambda segmentation-fault max