これは私の最初の投稿です。私はちょうどC++でコーディングを開始し、物理シミュレーションを行うprogammを作成しようとしました。 コマンドライン引数を取る必要があり、指定されたものに応じて、どのメソッドが使用されるかを決定する特定のクラスが作成されます。プログラム受信信号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);
}
私はこれを実行すると、私のプログラムの開発がクラッシュやショーがエラーは、次のとおりです。
Program received signal SIGSEGV, Segmentation fault. 0x000000000040259b in RunSimulation (particle=..., integrator=0x22fd30) at ..\test\test.cpp:116 116 particle = integrator->update_particles(particle, TimeStep);
をしかし、私はすべてが正常に動作し、main関数でクラスを作成書いた場合:
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/questions/17997228 /なんとぶら下がっているポインタ) – user657267