2015-01-28 7 views
0

val-grind에 의해이 코드가 발견 된 메모리 누수 문제를 해결하려고합니다. 필자는이 코드를 작성하지 않았지만 원래 코드를 ofstream을 사용하여 filebuf 및 ostream을 사용하지 않도록 축소했습니다.Ofstream 포인터와 3의 규칙 공유

문제는 다른 코드의 가상 getter 메서드에서 공유되고 호출되는 ofstream 포인터를 올바르게 삭제하는 방법을 알아낼 수 없다는 것입니다. 나는이 코드가 3의 규칙을 위반한다고 생각하지만 다른 할당 및 복사 생성자를 시도하는 것은 효과가 없었다.

다음은 ofstream 포인터를 삭제하려고 할 때 수정하려고하는 기본 코드의 예입니다. seg faults입니다. segfault 전에 이중 삭제 오류가 발생했습니다.

누구든지 도움을받을 수 있다면, 여기 붙어있는 것 같습니다. 감사합니다.

class myLogger 
{ 
public: 

myLogger(std::string testName); 

void createFileLog(); 

... 

protected: 

std::ofstream* my_LogStream; 

}; 

void MyLogger::createFileLog() 
{ 
    if(Created == false) 
    { 
     m_pLogStream = new std::ofstream(logFileName.c_str(), std::ofstream::out); 
     Created = true; 
    } 
} 

myLogger::~myLogger() 
{ 
    if(m_pLogStream) 
    { 
     delete m_pLogStream; 
     m_pLogStream = NULL; 
    } 
} 

답변

0

더 높은 호출에서 사본을 사용하고 소멸자를 두 번 호출하는 것으로 나타났습니다.