2015-02-04 2 views
1

디렉터리 개체 이름, 디렉터리 내의 하위 디렉터리 및 마지막으로 디렉터리 자체를 삭제하는 생성자를 만들려고합니다. 그러나 delete [] *subDirectories 행은 사용될 때마다 segfault를 발생시킵니다.빈 개체 배열을 어떻게 삭제합니까?

하위 디렉토리는

subDirectories[subDirectoryCount++] = new Directory(arguments[1], umask, time, this); 

Directory::~Directory() 
{ 
    delete [] name; 

    for (int i = 0; i < subDirectoryCount; i++) 
     delete subDirectories[i]; 
    delete [] *subDirectories; 
} 
+2

'delete [] subDirectories'. 'subDirectories'가'new []'로 생성되었는지 확인하십시오. 그렇지 않으면 정의되지 않은 동작이 발생합니다. – 0x499602D2

+5

C++의 경우 C 스타일 배열을 사용하지 말고 ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector)와 같은 표준 컨테이너를 사용해야합니다. – NetVipeC

답변

6

쓰기에 의해 할당됩니다

delete [] subDirectories; 

subDirectoriesnew []를 사용하여 할당되어 있는지 확인합니다.

어쨌든 그 중 하나를 중지하십시오. 대신 std::vector<std::unique_ptr<Directory>>을 사용하거나 요소를 공유하려면 std::vector<std::shared_ptr<Directory>>을 사용하십시오. 어느 쪽이든 라이브러리가 당신을 위해 메모리를 관리하게하십시오.

관련 문제