這是我第一篇文章。我剛剛開始用C++編寫代碼,並嘗試編寫一個程序,進行物理仿真。 它應該有一個命令行參數,並根據給定的內容創建一個特定的類,它決定了使用哪種方法。程序收到信號SIGSEGV,分段錯誤,當調用類指針時
static Integrator*
CreateIntegrator(int argc, char** argv)
{
Integrator * integrator;
if(string(argv[1])=="Euler")
{
EulerIntegrator Euler;
integrator=&Euler;
return integrator;
}
else if (string(argv[1])=="Runge-Kutta-2")
{
SecondOrderRungeKuttaIntegrator Kutta2;
integrator=&Kutta2;
return integrator;
}
else if (string(argv[1])=="Runge-Kutta-4")
{
FourthOrderRungeKuttaIntegrator Kutta4;
integrator=&Kutta4;
return integrator;
}
else
{
return 0;
}
}
static void
RunSimulation(std::vector<Particle>& particle, Integrator* integrator)
{
static const int FrameCount = 500;
static const int StepCount = 10;
static const double TimeStep = 0.01;
for(int frame = 0; frame < FrameCount; ++frame)
{
for(int step = 0; step < StepCount; ++step)
particle = integrator->update_particles(particle, TimeStep);
PrintParticles(particle, frame);
}
}
int
main(int argc, char** argv)
{
Integrator* integrator = CreateIntegrator(argc, argv);
if(integrator != 0)
{
std::vector<Particle> particle = ReadParticles();
RunSimulation(particle, integrator);
}
當我運行此我PROGRAMM崩潰,並顯示跟隨誤差:
Program received signal SIGSEGV, Segmentation fault. 0x000000000040259b in RunSimulation (particle=..., integrator=0x22fd30) at ..\test\test.cpp:116 116 particle = integrator->update_particles(particle, TimeStep);
但如果我寫的創建主要功能一切類工作正常:
int
main(int argc, char** argv)
{
FourthOrderRungeKuttaIntegrator* integrator;
FourthOrderRungeKuttaIntegrator Kutta4;
integrator=&Kutta4;
if(integrator != 0)
{
std::vector<Particle> particle = ReadParticles();
RunSimulation(particle, integrator);
}
希望有人可以幫我解決這個問題。 非常感謝!
你的編譯器不會給出任何有關返回本地變量地址的警告嗎?您應該啓用(更多)警告。請參閱http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope –
[什麼是懸掛指針](http:// stackoverflow。 COM /問題/ 17997228 /什麼 - 是 - 一 - 懸空指針) – user657267