Я боролся с ошибкой сегментации в течение нескольких месяцев, теперь я здесь, чтобы попросить о помощи.
Ошибка сегментации появляется, когда я вызываю следующую функцию
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 (), она показывает ошибку «двойное освобождение или повреждение», и программа прерывает вызов c ++ / 4.1.2 / ext / new_allocator.h: 94 delete (__P), который дополнительно вызывает free () из библиотеки gnu /lib64/libc.so.6. Но поскольку элементы на карте не выделяются новыми, почему он все еще вызывает free (), чтобы очистить его. Буду очень признателен за ваши комментарии. Спасибо.