我一直有一个特殊的问题。我在工作的Linux群集上开发了一个C ++程序。我试图在Ubuntu 14.04机器上在家中使用它,但是该程序由6个文件组成:main.hpp,main.cpp(取决于)sarsa.hpp,sarsa.cpp(Sarsa类)(取决于) wec.hpp,wec.cpp确实可以编译,但是当我运行它时,它要么返回segmenation fault
要么不输入该类的一个基本函数Sarsa
。
主代码调用构造函数和设置函数没有问题:
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
变量。在分配一个值之前使用其值的任何代码的行为都是未定义的,因此,程序在一个环境与另一个环境中的行为完全不同是完全合理的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句