없이 무료 더블, 은 무엇 동적 메모리 할당을 포함하지 않는 것입니다 프로그램에서 더블 자유를 일으킬 수 있을까?는 동적 메모리 할당 일반적으로
정확하게 말해서 코드 중 어느 것도 동적 할당을 사용하지 않습니다. 나는 STL을 사용하고있다. 그러나 G ++/glibc/STL의 깨어진 implmentation보다 내가 잘못한 일이 될 가능성이 훨씬 더 높다.
나는이에 대한 답을 찾기 위해 노력하고 주위에 검색 한, 그러나 나는 동적 메모리 할당없이 생성되는이 오류의 예를 찾을 수 없습니다.
나는이 오류를 생성 된 코드를 공유하고 싶지만, 내가 그것을 해제 할 수 없습니다 그리고 난 여기에 주어진 수있을 정도로 작은 뭔가 문제를 감소하는 방법을 모르겠어요. 내 코드가하는 일의 요지를 설명하기 위해 최선을 다할 것입니다.
함수를 떠날 때 오류가 발생했으며 스택 추적은 그것이 소멸자 std::vector<std::set<std::string>>
에서 나온 것으로 나타났습니다. 벡터의 일부 요소 수가 emplace_back()
에 의해 초기화되고있었습니다. 마지막 도랑 시도에서, 나는 push_back({{}})
으로 바꾸었고 문제는 사라졌습니다. 환경 변수를 설정하여 문제를 피할 수도 있습니다 MALLOC_CHECK_ = 2. 내 이해에 의해, 그 환경 변수는 glibc가 오류를 없애기보다는 더 많은 정보로 중단되도록 야기했을 것입니다.
이 질문은 단지 내 호기심을 제공하기 위해 요구되는, 그래서 어두운 대답 슈팅을 해결합니다. 컴파일러 버그 였지만, it's always my fault이라는 것이 나왔습니다.
나는 3 개의 규칙에 관한 많은 질문과 기사를 발견했다. 그러나 귀하의 답변을 포함하여 모두 새로운 내용의 전화와 삭제가 필요했습니다. 나는 복사 생성자와 대입 연산자를 추가하는 것이 내 문제를 해결할 것이라고 믿고 싶지만 내 질문은 왜 그런가? 동적으로 멤버를 할당 한 클래스에서는 모든 것을 스택에 넣을 때가 아니라 어떤 일이 발생할 수 있는지 이해합니다. –