2015-02-04 82 views
1

我想创建一个构造函数,删除一个目录对象的名称,然后目录中的子目录,最后是目录本身。但是,使用delete [] *subDirectories行时会导致段错误。如何删除空对象的数组?

子目录通过

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; 

确保subDirectories使用new []分配。

无论如何,不​​要停止这样做。如果要共享元素,请使用std::vector<std::unique_ptr<Directory>>,或者使用std::vector<std::shared_ptr<Directory>>。无论哪种方式,让图书馆为你管理记忆。