- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个随机失败的测试,我怀疑是由于 std::set 中对象的顺序是按指针值排序的。但是,在我当前的 exe 上,测试总是通过。有没有一种方法可以“混合”指针创建,以便我的集合中对象的顺序在两次运行之间不同?
换句话说,对于给定的 C++ 代码,指针的“排序顺序”(p1 < p2) 是否是确定的,或者不同的编译或不同的运行是否可以有不同的排序顺序?
例如,在此代码中,在创建 p1 和 p2 之间添加“p1b.reset(nullptr)”将反转 p1/p2 的“排序顺序”。有没有其他方法可以在不更改源代码的情况下影响此顺序?
int main(void)
{
std::unique_ptr< MyClass > p1b(new MyClass());
//Lot of code, with memory allocated/deallocated
std::unique_ptr< MyClass > p1(new MyClass());
//p1b.reset(nullptr);
//Lot of code, with memory allocated/deallocated
std::unique_ptr< MyClass > p2(new MyClass());
std::cout << "p1: " << p1.get() << std::endl;
std::cout << "p2: " << p2.get() << std::endl;
}
给予:
p1: 0x171c030
p2: 0x171c050
注释掉“p1b.reset(nullptr)”:
p1: 0x21f9030
p2: 0x21f9010
最佳答案
编辑 2:根据您的编辑:https://stackoverflow.com/revisions/37027675/3
In other words, is the "sorted order" (
p1 < p2
) of pointers deterministic for a given C++ code, or does different compilations or different runs can have different sorted orders ?
是的,它们可以有不同的顺序,因为 - 当您在堆上分配时,不能保证内存分配器返回的指针地址的“连续顺序”,所以,是的,它可以随时更改。阅读答案的剩余部分。
编辑 1:根据您的编辑:https://stackoverflow.com/revisions/37027675/2
For example in this code, adding
p1b.reset(nullptr)
betweenp1
andp2
creation will invertp1
/p2
order. Is there any other way to influence this order ?
不,它不会“颠倒”创建顺序,您销毁了p1
并创建另一个对象(可能相等)并用它代替 p1
.阅读最初的答案..
初始答案
Is there a way I can "mix" the pointers creations so the order of object in my set is different between two runs ?
很有可能,您的内存分配器以连续的方式分配内存,因此如果您在单线程程序中连续分配元素,它们很可能位于连续的内存地址中。但如果是关于绝对指针地址,由于 Address space layout randomization,它们可能在程序的每次运行中处于“不同”的绝对偏移量。
如果您希望连续元素的内存地址是随机的,或者以特定顺序,您将不得不以随机方式或简单地按照您希望它创建的顺序创建它...
对于一个随机的时尚...... ...在我的脑海中:也许,生成一个std::vector
您要创建的对象的索引;随机化(或随机化)vector
然后遍历创建对象的 vector 元素。
我上面的回答是基于你所说的怀疑。但同样,我对此感到不舒服:
I have a test randomly failing, I suspect due to order of objects in a std::set ordered on pointers values. However, on my current exe, the test always passes.
检查 Undefined Behaviors并通过您的代码运行内存工具和静态分析器。
关于c++ - 再现随机 std::set<T*> 顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37027675/
许多书籍都使用下图来说明 Fisher 线性判别分析的思想(该图来自 Pattern Recognition and Machine Learning,第 188 页) 我想知道如何用 R(或任何其他
我想淡入 UITextField 的边框,因此我自己在 UIView 中使用其图层重新创建它: borderView = [[UIView alloc] initWithFrame:CGRec
我希望有人能指出我正确的方向。首先,我不是统计学家。我是一名软件开发人员,我的任务是尝试使用 R 重现 SPSS 因子分析的结果(使用 PC 提取和方差最大旋转)。我在过去一周只接触过 R,所以我试图
我正在尝试使用我用 C 编写的小程序重现 .raw 图像文件,但每次运行该程序时,我的输出文件都变得不可读。 我的程序所做的就是获取每个像素并将其写入相应的输出文件。 另请注意,该程序仅支持灰度图像。
我想在 R 中实现以下 SAS 代码。 $$N_e = N_o{1-exp[\frac{(d+bN_o)(T_h N_e - T)}{(1+c N_o)}]}$$ 其中 $b>0$、$c\geq 0$
我正在尝试重现 dlib 的 frontal_face_detector() 的训练过程。 我正在使用相同的数据集(来自 http://dlib.net/files/data/dlib_face_de
我们在生产环境中遇到过一些异常: UnknownTopicOrPartitionException: This server does not host this topic-partition 根据
我正在尝试在 Matlab 中实现一个颜色条,它在以灰色打印时看起来是线性的。我认为最直接的方法是实现 gnuplot pm3d 30,31,32 RGB 色彩空间。在 this website我找到
我是一名优秀的程序员,十分优秀!