I need to create a vector of ODESolver
objects. If I create an ODESolver
object, everything is fine, however, if I use a vector I get a segmentation fault when the ODESolver
constructor is called. Why is this the case and how do I solve this problem?
#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;
}