this is my first post here. I've just started coding in C++ and tried to write a progamm, that does a physical simulation. It should take a command line argument and depending what is given creates a specific class, which determines what method is used.
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 );
}
When I run this my programm crashes and shows follow error:
Program received signal SIGSEGV, Segmentation fault. 0x000000000040259b in RunSimulation (particle=..., integrator=0x22fd30) at ..\test\test.cpp:116 116 particle = integrator->update_particles( particle, TimeStep );
But if I write create the class in the main function everything works fine:
int
main( int argc, char** argv )
{
FourthOrderRungeKuttaIntegrator* integrator;
FourthOrderRungeKuttaIntegrator Kutta4;
integrator=&Kutta4;
if( integrator != 0 )
{
std::vector<Particle> particle = ReadParticles();
RunSimulation( particle, integrator );
}
I hope somebody can help me to fix this problem. Thank you very much!