Inheritance c++;调用变量会产生seg错误[smartPointed object]

Inheritance c++;调用变量会产生seg错误[smartPointed object],inheritance,segmentation-fault,smart-pointers,Inheritance,Segmentation Fault,Smart Pointers,我在做一个神经元模拟的项目,我有一个seg故障我不能理解,gdb也不能。我在用智能指针 我有这样的想法: class vehicle:enable_shar_from_this() { protected double direction_; } class car: public direction_ { friend class policeAgent; public: void change_direction(rnd); } cla

我在做一个神经元模拟的项目,我有一个seg故障我不能理解,gdb也不能。我在用智能指针

我有这样的想法:

class vehicle:enable_shar_from_this() {
   protected 
   double direction_;
   }

class car: public direction_ {
    friend class policeAgent;
    public:
    void change_direction(rnd);
    }

class policeAgent: enable_share... {
    public:
    std::vector<CarSmartPointer> cars ={};
    void close_the_street(rnd);
}

car::change_direction(rnd_num){
    OLD_direction=direction;
    direction+=direction+rnd_num;
    newCar=make_shared<CarSmartPointer>();
    arriving_cars.push_back(newCar);
    }

publicAgent::close_the_street(rnd_num){
    lastCar= cars.cend();
    for (myCar=cars.begin(); myCar!=lastCar; myCar++)
        {(*myCar)->change_direction(rnd_num);}

main{
auto sbirro makeshared<publicAgent>();
while (not cars.empty()){
sbirro->closeTheStreet()
}
}
0x00007FF6319675在growth::GrowthCone::growth中(此=0x0,rnd_引擎=…) 位于/.my_文件夹../elements/GrowthCone.cpp:52

52双存储角度=角度

gdb) bt
#0  0x00007ffff6319675 in
growth::GrowthCone::grow(std::mersenne_twister_engine<unsigned long,
32ul, 624ul, 397ul, 31ul, 2567483615ul, 11ul, 4294967295ul, 7ul,
2636928640ul, 15ul, 4022730752ul, 18ul, 1812433253ul>&) (this=0x0,
rnd_engine=...)
at /..my_folders../elements/GrowthCone.cpp:52
#1  0x00007ffff631ce2e in growth::Neurite::update_growth_cones(std::mersenne_twister_engine<unsigned
long, 32ul, 624ul, 397ul, 31ul, 2567483615ul, 11ul, 4294967295ul, 7ul,
2636928640ul, 15ul, 4022730752ul, 18ul, 1812433253ul>&) (this=0x983700,
rnd_engine=...)
    at /..my_folders../elements/Neurite.cpp:58
#2  0x00007ffff631cd70 in
growth::Neurite::grow(std::mersenne_twister_engine<unsigned long, 32ul,
624ul, 397ul, 31ul, 2567483615ul, 11ul, 4294967295ul, 7ul, 2636928640ul,
15ul, 4022730752ul, 18ul, 1812433253ul>&) (this=0x983700, rnd_engine=...)
    at /..my_folders../elements/Neurite.cpp:44
#3  0x00007ffff631245d in
growth::Neuron::grow(std::mersenne_twister_engine<unsigned long, 32ul,
624ul, 397ul, 31ul, 2567483615ul, 11ul, 4294967295ul, 7ul, 2636928640ul,
15ul, 4022730752ul, 18ul, 1812433253ul>&) (this=0x724390, rnd_engine=...)
    at /..my_folders../elements/Neuron.cpp:120
#4  0x00007ffff630f37f in
_ZN6growth17SimulationManager8simulateERKNS_4TimeE._omp_fn.0(void) ()
    at /..my_folders../kernel/simulation_manager.cpp:110
#5  0x00007ffff535e15f in GOMP_parallel (fn=0x7ffff630f251
<_ZN6growth17SimulationManager8simulateERKNS_4TimeE._omp_fn.0(void)>,
data=0x7fffffffd010, num_threads=1, flags=0) at
/build/gcc/src/gcc/libgomp/parallel.c:168
#6  0x00007ffff630efeb in
growth::SimulationManager::simulate(growth::Time const&) (this=0x99b2b0,
t=...)
gdb)bt
#0 0x00007FF6319675英寸
growth::GrowthCone::growth(标准::mersenne_twister_engine&)(这个=0x0,
rnd_引擎=…)
位于/.my_文件夹../elements/GrowthCone.cpp:52
#1 0x00007FF631CE2E在生长中::神经轴突::更新生长锥(标准::mersenne_twister_engine&)(此=0x983700,
rnd_引擎=…)
位于/.my_文件夹../elements/Neurite.cpp:58
#2 0x00007FF631CD70英寸
生长::神经突::生长(标准::mersenne_twister_engine&)(此=0x983700,rnd_engine=…)
位于/.my_文件夹../elements/Neurite.cpp:44
#3 0x00007FF631245D英寸
growth::Neuron::growth(std::mersenne_twister_engine&)(this=0x724390,rnd_engine=…)
位于/.my_文件夹../elements/Neuron.cpp:120
#4 0x00007FF630F37F英寸
_ZN6Growth17SimulationManager 8SimulateerKns\u 4时间.\u omp\u fn.0(无效)()
位于/.my_folders../kernel/simulation_manager.cpp:110
#GOMP_并联中的5个0x00007ffff535e15f(fn=0x7ffff630f251
,
数据=0x7FFFFFD010,线程数=1,标志=0)
/build/gcc/src/gcc/libgomp/parallel.c:168
#6 0x00007ffff630efeb英寸
growth::SimulationManager::simulate(growth::Time const&)(this=0x99b2b0,
t=…)

谢谢

我在循环时修改容器的问题,因此这是一种未定义的行为

解决方案添加临时容器来存储新车,然后插入旧容器

gdb) bt
#0  0x00007ffff6319675 in
growth::GrowthCone::grow(std::mersenne_twister_engine<unsigned long,
32ul, 624ul, 397ul, 31ul, 2567483615ul, 11ul, 4294967295ul, 7ul,
2636928640ul, 15ul, 4022730752ul, 18ul, 1812433253ul>&) (this=0x0,
rnd_engine=...)
at /..my_folders../elements/GrowthCone.cpp:52
#1  0x00007ffff631ce2e in growth::Neurite::update_growth_cones(std::mersenne_twister_engine<unsigned
long, 32ul, 624ul, 397ul, 31ul, 2567483615ul, 11ul, 4294967295ul, 7ul,
2636928640ul, 15ul, 4022730752ul, 18ul, 1812433253ul>&) (this=0x983700,
rnd_engine=...)
    at /..my_folders../elements/Neurite.cpp:58
#2  0x00007ffff631cd70 in
growth::Neurite::grow(std::mersenne_twister_engine<unsigned long, 32ul,
624ul, 397ul, 31ul, 2567483615ul, 11ul, 4294967295ul, 7ul, 2636928640ul,
15ul, 4022730752ul, 18ul, 1812433253ul>&) (this=0x983700, rnd_engine=...)
    at /..my_folders../elements/Neurite.cpp:44
#3  0x00007ffff631245d in
growth::Neuron::grow(std::mersenne_twister_engine<unsigned long, 32ul,
624ul, 397ul, 31ul, 2567483615ul, 11ul, 4294967295ul, 7ul, 2636928640ul,
15ul, 4022730752ul, 18ul, 1812433253ul>&) (this=0x724390, rnd_engine=...)
    at /..my_folders../elements/Neuron.cpp:120
#4  0x00007ffff630f37f in
_ZN6growth17SimulationManager8simulateERKNS_4TimeE._omp_fn.0(void) ()
    at /..my_folders../kernel/simulation_manager.cpp:110
#5  0x00007ffff535e15f in GOMP_parallel (fn=0x7ffff630f251
<_ZN6growth17SimulationManager8simulateERKNS_4TimeE._omp_fn.0(void)>,
data=0x7fffffffd010, num_threads=1, flags=0) at
/build/gcc/src/gcc/libgomp/parallel.c:168
#6  0x00007ffff630efeb in
growth::SimulationManager::simulate(growth::Time const&) (this=0x99b2b0,
t=...)