【发布时间】:2016-10-12 07:29:14
【问题描述】:
所以我的问题的本质是这样的:
//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
};
编译正常,但在退出 main 时会出现“双重释放或损坏”(在完整程序中,这只是一个子函数)
我怀疑shared_ptr 到big 在某个时候被释放,然后在退出主目录时又被释放,但我不确定也不知道如何修复它。有人可以解释一下这个错误的原因吗?
我红了我必须NULL 指向的指针,但我不知道在哪里。
或者也许我只是使用了错误的智能指针或类似的东西?
谢谢
【问题讨论】: