ran2() 数字配方实现。将 void 指针作为函数参数传递

ran2() numerical recipe implementation. Passing void pointer as function parameter

我正在尝试实现 Numerical Recipes 中的 ran2() 方法。我在 [此处] 1 找到了一个我正在努力工作的实现。

我首先尝试使用 ran2_get_double(void* vstate) 函数,但我以前从未使用过 void 指针作为参数,即使我有使用 [=24 的经验,我也不知道它是如何工作的=].

经过反复试验,这是目前我的主 (cpp) 文件中的内容:

    double y{ 1.0 };

    for (int i{ 0 }; i < 100; i++) {
    double* z{ &y };
    random_numbers.push_back(ran2_get_double(z));

}

这部分代码有效,我得到了一系列随机数,但最后我收到错误消息:

Stack around the variable 'y' was corrupted.

我环顾四周,我怀疑这与指针的内存管理有关,但我真的不确定问题到底出在哪里。任何人都可以发现问题或建议在这里使用 ran2() 实现及其 void 参数函数的最佳方法吗?谢谢

ran2_get_double() 函数采用 void * 形式的 ran2_state_t 作为参数,但您传递的是指向双精度数的指针。这会导致缓冲区溢出,从而破坏您的内存。

您需要创建一个 ran2_state_t 对象并使用 ran2_set 对其进行初始化。

这些函数实际上应该只接受一个 ran2_state_t * 作为参数,这样就不会发生这样的错误。或者在 c++ 世界中 ran2_state_t&。最好让它成为一个保留其自身状态的对象,并且 ran2_set 成为构造函数。