2015-02-04 2 views
1

Я пытаюсь создать конструктор, который удаляет имя объекта каталога, а затем подкаталоги в каталоге и, наконец, сам каталог. Однако линия delete [] *subDirectories вызывает segfaults всякий раз, когда используется.Как удалить пустой массив объектов?

Подкаталоги выделяются

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-контейнеры, такие как ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector) – NetVipeC

ответ

6

запись:

delete [] subDirectories; 

Убедитесь subDirectories выделяется с помощью new [].

В любом случае, прекратите это делать. Вместо этого используйте std::vector<std::unique_ptr<Directory>>, или std::vector<std::shared_ptr<Directory>>, если элементы должны использоваться совместно. В любом случае библиотека может управлять памятью для вас.

Смежные вопросы