我一直在试验 c++11 随机库,遇到了一个奇怪的问题。我的代码编译良好并在 Eclipse 中运行,但是一旦我尝试在 shell 中运行可执行文件(在本例中为 linux 上的 bash),我就会得到一个核心转储。我检查了 Eclipse 中是否有任何特殊的环境变量,但似乎不是这样。
我不起眼的代码:
std::mt19937 eng(time(NULL));
std::uniform_int_distribution<int> uniformEnergy(0,E.size()-1);
std::uniform_real_distribution<double> uniformProb(0,0.1);
for (int i = 0; i < 10; i++) {
int E_r = uniformEnergy(eng);
float p_r = uniformProb(eng);
...
还有 seg 错误,在 random.h 中有一个看似无限的(我在 4000 之后放弃了)堆栈:
#0 0x0000000000403af4 in std::uniform_int_distribution<int>::param_type::b (
this=<error reading variable: Cannot access memory at address 0x7fffc1381ff8>)
at /usr/include/c++/4.6/bits/random.h:1636
1636 b() const
在我的终端中可能有什么问题,但在 Eclipse 中却可以很好地工作?
编辑: 我尝试自己编译代码,它工作正常,让我相信 eclipse 制作的可执行文件出于某种原因是不好的。有任何想法吗? 编辑 2这对我来说当然是一个愚蠢的错误: E.size() 根据我运行的目录而有所不同,导致(可能)它为零。
捂脸..