ODESolver
개체의 벡터를 만들어야합니다. ODESolver
객체를 만들면 모든 것이 정상입니다. 그러나 벡터를 사용하면 ODESolver
생성자가 호출 될 때 세그먼트 화 오류가 발생합니다. 왜 이런 경우이며 어떻게이 문제를 해결할 수 있습니까? 내가 gsl_odeiv_step_alloc
및 gsl_odeiv_step_free
같은데요GSL을 사용하여 ODE를 해결하기위한 객체 벡터를 만들 때 세분화 오류
#include <vector>
#include <iostream>
#include <gsl/gsl_errno.h>
#include <gsl/gsl_odeiv.h>
#include <gsl/gsl_matrix.h>
struct ODESystem {};
struct ODESolver {
ODESolver(ODESystem &ODE_system)
{
d_solver_ptr = gsl_odeiv_step_rkf45;
d_step_ptr = gsl_odeiv_step_alloc(d_solver_ptr, d_dim_ODE);
d_evolve_ptr = gsl_odeiv_evolve_alloc(d_dim_ODE);
}
~ODESolver()
{
gsl_odeiv_step_free(d_step_ptr);
gsl_odeiv_evolve_free(d_evolve_ptr);
}
const gsl_odeiv_step_type *d_solver_ptr;
gsl_odeiv_step *d_step_ptr;
gsl_odeiv_evolve *d_evolve_ptr;
gsl_odeiv_system d_ODE_system;
const static int d_dim_ODE = 4;
};
struct MyODESystem : public ODESystem {};
int main()
{
MyODESystem myODE;
ODESolver mySolver(myODE); // WORKS FINE
std::vector<MyODESystem> myODEVec;
myODEVec.push_back(MyODESystem());
std::vector<ODESolver> mySolverVec;
mySolverVec.push_back(ODESolver(myODEVec[0])); // SEGMENTATION FAULT: 11
return 0;
}