加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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时已经删除了地图拥有对象.

另请注意,以下划线和大写字母开头的名称是为实现保留的 – 您不能使用它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读