考虑以下代码段。当向量体积很小时它可以正常工作但是当它变得比18更大时崩溃(分段错误)(在我的例子中)。
我认为发生这种情况的原因之一可能是std::sort
会围绕创建新副本的对象移动,当向量被解除分配时,它会尝试释放原始指针。
如果我的假设是正确的,那么对这些对象进行排序的最佳方法是什么?
class info {
int idx, value, tsub;
public:
info(int a, int b, int c) : idx(a), value(b), tsub(c) {}
static bool compareP(info i1, info i2) { return i1.tsub <= i2.tsub; }
};
class CustomClass {
public:
void MyFunc() {
vector<info> data;
for (int i = 0; i < 18; i++)
data.push_back(info(0, 0, 0));
sort(data.begin(), data.end(), info::compareP);
}
};
int main() {
CustomClass c;
c.MyFunc();
}
谢谢!