一台 Linux 机器上出现分段错误,但另一台 Linux 机器上的 C++ 代码却没有出现分段错误

Enr*_*ini 5 c++ linux portability segmentation-fault

我一直有一个特殊的问题。我在工作中在Linux集群上开发了一个C++程序。我尝试在Ubuntu 14.04机器上使用它,但是该程序由6个文件组成:main.hpp,main.cpp(依赖于)sarsa.hpp,sarsa.cpp(类Sarsa)(依赖于) wec.hpp、wec.cpp 确实可以编译,但是当我运行它时,它要么返回segmenation fault,要么不输入该类的一个基本函数Sarsa

主要代码调用构造函数和setter函数没有问题:

  Sarsa run;
  run.setVectorSize(memory,3,tilings,1000);
Run Code Online (Sandbox Code Playgroud)

ETC。

但是,它无法运行公共函数episode,因为learningRate应该包含一个大整数,但对于所有剧集(迭代)都返回 0。

learningRate[episode]=run.episode(numSteps,graph);}
Run Code Online (Sandbox Code Playgroud)

我尝试使用 gdb 调试代码,它返回了:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000408f4a in main () at main.cpp:152
152     learningRate[episode]=run.episode(numSteps,graph);}
Run Code Online (Sandbox Code Playgroud)

我也尝试过valgrind,它返回:

==10321==  Uninitialised value was created by a stack allocation
==10321==    at 0x408CAD: main (main.cpp:112)
Run Code Online (Sandbox Code Playgroud)

但没有内存泄漏问题。

我想知道是否有一个设置可以尝试调试外部文件sarsa.cpp,因为我认为该类可能是罪魁祸首

在该文件中,我使用 C++v11 语言(不过,我预计会在编译时出现错误),因此我什至使用 进行了编译g++ -std=c++0x,但没有任何改进。

不幸的是,由于代码的大小,我无法将其发布在这里。我真的很感激任何有关这个问题的帮助。我错过了什么明显的事情吗?你至少能帮我调试一下吗?

预先感谢您的帮助。

更正: main.cpp:

全局数组的定义:`#define numEpisodes 10

int LearningRate[numEpisodes];`

函数即将结束时main

for (int episode; episode<numEpisodes; episode++) { if (episode==(numEpisodes-1)) { // Save the simulation data only at the graph=true;} // last episode learningRate[episode]=run.episode(numSteps,graph);}

Joh*_*ger 3

正如您刚刚添加到问题中的代码所示,问题的出现是因为您没有初始化变量episode。在分配值之前使用其值的任何代码的行为都是未定义的,因此程序在一种环境中的行为与在另一种环境中的行为不同是完全合理的。