我遇到了一个奇怪的问题。我在工作的 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);

等等。

但是,它不能运行公共(public)函数 episode ,因为 learningRate 应该包含一个大整数,对于所有剧集(迭代)返回 0。
learningRate[episode]=run.episode(numSteps,graph);}

我试图用 gdb 调试代码,它返回了:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000408f4a in main () at main.cpp:152
152     learningRate[episode]=run.episode(numSteps,graph);}

我也试过 valgrind ,它返回:
==10321==  Uninitialised value was created by a stack allocation
==10321==    at 0x408CAD: main (main.cpp:112)

但没有内存泄漏问题。

我想知道是否有尝试调试外部文件 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);}

最佳答案

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

关于c++ - 一台 Linux 机器上的段错误,而不是另一台 C++ 代码的段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30265232/

10-10 04:17