c – 双重免费或使用共享指针损坏
发布时间:2020-12-16 10:13:26 所属栏目:百科 来源:网络整理
导读:所以问题的实质是: //Big.hclass Big{ public: int a,b;};//Mini.hclass Big;class Mini{ public: Mini(float a,shared_ptrBig ptb):ma(a),me(-a),ptb(ptb){}; float ma,me; shared_ptrBig ptb;};//mainint main(){ std::listMini lm; if(true){ //Or some
所以问题的实质是:
//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时会出现“双重免费或损坏”(在完整程序中这只是一个子功能) 我怀疑 我红了,我必须将指针指向NULL,但我不知道在哪里. 谢谢 解决方法
您正在使用指向堆栈上现有对象的指针构建shared_ptr.不要那样做;这不是如何使用shared_ptr.永远不应删除或释放普通堆栈对象.它指向的对象应该在堆上,即使用new或等效创建.
创建shared_ptr的推荐方法是通过make_shared: auto p = make_shared<Big>(); 或者老式的方式: shared_ptr<Big> p(new Big); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |