小编Pur*_*ord的帖子

双重免费或使用共享指针损坏

所以问题的实质是:

//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
};
Run Code Online (Sandbox Code Playgroud)

编译正常,但在退出main时会出现" 双重免费或损坏 "(在完整程序中这只是一个子功能)

我怀疑shared_ptrto big在某个时候被释放,然后在退出main时再次被释放,但我不确定并且不知道如何解决它.有人可以向我解释这个错误的原因吗?

我红了,我不得不NULL指向,但我不知道在哪里.或者我可能只是使用错误的智能指针或类似的东西?

谢谢

c++ pointers

4
推荐指数
1
解决办法
2800
查看次数

标签 统计

c++ ×1

pointers ×1