所以我的问题的本质是这样的:
//Big.h
class Big{
public:
int a, b;
};
//Mini.h
class Big;
class Mini{
public:
Mini(float a, shared_ptr<Big> ptb):ma(a), me(-a), ptb(ptb){};
float ma, me;
shared_ptr<Big> ptb;
};
//main
int main(){
std::list<Mini> lm;
if(true){ //Or some sub function or rutin
Big big; big.a = 100; big.b = 200;
Mini derp(5, shared_ptr<Big>(&big));
lm.push_front(derp);
}
//Do something
};
编译没问题,但在退出主函数时出现“double free or corruption”错误(在完整程序中仅为子函数)。
我怀疑
shared_ptr
对big
的应用会在某个时刻被释放,然后在退出main时再次释放,但我不确定也不知道如何修复它。能有人请解释一下这个错误的原因吗?我看到我需要
NULL
指针,但我不知道在哪里。
或者我可能只是使用了错误的智能指针之类的东西?谢谢