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 成为构造函数。
我正在尝试实现 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 成为构造函数。