c++ - 在 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;
}
解决方案
的成员函数A
vector<B> getArray()
正在返回成员变量的副本array
。调用它两次将生成两个独立的副本,因此使用它们std::max_element
是危险的。
您应该让函数返回对成员变量的引用array
。
vector<B>& getArray() // add &
推荐阅读
- windows - 添加名称中带有空格的 Active Directory 组会导致 PowerShell 脚本出错
- javascript - Chrome 的 tabcapture api 没有在标签上录制所有音频
- python - python TypeError 不可散列的类型列表
- c++ - 在地图上启动对象的正确方法
- java - Spring Cloud(Netflix OSS)与 WSO2
- assembly - 6502 的快速有符号 16 位除以 7
- javascript - 如果存在 cookie,则显示 div
- php - 将值显示到 mysql 到 html 表中
- php - for 循环数被隐藏分页
- excel-formula - 当 Excel 函数的单元格被其他函数引用时,它们是否会重新计算?