c – 调用std :: map :: clear的分段错误
发布时间:2020-12-16 07:35:41 所属栏目:百科 来源:网络整理
导读:几个月来我一直在努力解决分段错误,现在我来这里寻求帮助. 当我调用以下函数时出现分段错误 void foo(...,std::mapMyClass*,double x) {if ( !x.empty() ) x.clear();...}Class A {private:mapMyClass*,double _N;public:void f(...) {foo(...,_N);...}};//i
几个月来我一直在努力解决分段错误,现在我来这里寻求帮助.
当我调用以下函数时出现分段错误 void foo(...,std::map<MyClass*,double> & x) { if ( !x.empty() ) x.clear(); ... } Class A { private: map<MyClass*,double> _N; public: void f(...) { foo(...,_N); ... } }; //in main routine,the function is called in a loop A a; while(...) { a.f(...); } 使用gdb,我将错误添加到调用clear()函数的行,它显示“double free or corruption”错误,程序在调用c /4.1.2/ext/new_allocator.h:94删除时退出(__ P)它进一步从gnu库/lib64/libc.so.6调用free().但由于地图中的元素不是由new分配的,为什么它仍然会调用free()来清除它.我非常感谢你的评论.谢谢. 解决方法
鉴于地图由另一个对象拥有,可疑地听到在调用clear时已经删除了地图拥有对象.
另请注意,以下划线和大写字母开头的名称是为实现保留的 – 您不能使用它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |