몇 달 동안 세그먼트 결함으로 고생하고 있습니다. 이제 도움을 청합니다. 분할 고장이 나는 GDB를 사용하여 다음과 같은 기능세그먼트 화 오류가 std :: map :: clear을 호출합니다.
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(...);
}
를 호출 할 때, 나는 분명히() 함수를 호출 라인에 오류 식은 나타납니다, 그것은이다 "더블 무료 또는 손상"오류 및 프로그램에 중단 C++/4.1.2/ext/new_allocator.h : 94 delete (__ P)를 호출하여 gnu 라이브러리 /lib64/libc.so.6에서 free()를 호출합니다. 그러나 맵의 요소가 new에 의해 할당되지 않았기 때문에 여전히 그것을 지우기 위해 free()를 호출하는 이유는 무엇입니까? 나는 정말로 당신의 의견에 감사 할 것입니다. 고맙습니다.
오류는 다른 곳에 있어야합니다. 맵이 비 었는지 어쨌든 상관없이'clear()'를 호출 할 수 있습니다. 좀 더 앰비언트 코드를 보여주세요. –
지도를 값으로 전달하면 프로그램의 의미가 틀리지 만 segf '는 어떻게됩니까? – 111111
은 힙에 할당 된'foo'에 매개 변수로 전달되는 객체입니까? 그렇다면 이전에 이미 할당이 해제되었거나 다른 곳으로 이전되었을 가능성이 있습니까? –