我创建了一个类“ config”,其中包含12个布尔值,以std :: array进行组织。该类具有返回双精度值的“结冰”功能。 尝试使用我编写的谓词通过std :: sort(包含在#include中)通过std :: sort命令订购2 ^ 12(4096)配置的向量,但出现分段错误错误。
将向量缩小到205(而不是1)可以消除该错误,但是我不知道为什么。 如果我将向量设为4096长,并尝试仅对一小部分进行排序,则它将起作用直到该部分长到175+。 将向量缩小到例如1000左右,可以在给出分段误差之前将部分排序限制在20左右。
make_unique
我希望代码能对向量进行排序,但会遇到分段错误。
答案 0 :(得分:0)
您的程序在sort
函数中具有未定义的行为,因为您的谓词按值获取config
,因此将进行复制并在此位置调用复制构造函数,该复制构造函数仅复制数组val
,但是不是g
。
bool pred (config c1, config c2){ return c1.icing()>c2.icing(); }
// takes by value, copy ctor is called
config (const config& fro): val(fro.val){}; // only val is copied, g HAS GARBAGE VALUE
// icing in pred uses g !! - stric weak ordering is violated because g has GARBAGE VALUE
修正1:
通过const config&
传递配置:
bool pred (const config& c1, const config& c2){ return c1.icing()>c2.icing(); }
或修复2:
g
在副本构造函数中初始化:
config (const config& fro): val(fro.val), g(fro.g){};