具有无限子的树的递归函数。 C ++

时间:2015-10-23 12:30:08

标签: c++ recursion tree filesystems

我创建了一个虚拟文件系统,用于模拟硬盘驱动器。我得到的问题是,当我格式化这个“驱动器”时,我需要浏览每个文件夹和子文件夹并删除我创建的“文件”,然后删除文件夹而不会导致内存泄漏:) 我已经在这几个小时了,我试图制作递归函数,但它不会删除所有内容。它一直卡在某处:(

任何想法都会让我的一周!感谢。

这是我的folder.h和递归函数的代码示例。

folder.h:

#ifndef FOLDER_H
#define FOLDER_H
#include <iostream>
#include <string>
#include "file.h"
using namespace std;
class folder
{
private:
    int CAP = 10;

    int nrOfChildFolders;
    int nrOfFiles;
    string folderName;
    folder * parentFolder;
    folder * childFolder[10];
    file * fileArray[10];



public:
    folder();
    folder(string folderName, folder * parent);
    ~folder();
    void addFolder(string folderName);
    void addFile(string fileName, int nr);
    string getFolderAndFiles()const;
    string getFolderName()const;
    int getFileNr(string fileName)const;
    void reset();
    folder * getFolder(string name)const; 
    folder * getParentFolder()const;
    void deleteFile(string name, int nr);
    folder * getChildFolder(int pos);
    int getNrOfChildFolders()const;

    /* data */
};
#endif

递归函数:

void FileSystem::recursiveFolderSwitcher(folder * newCurrentFolder) 
{
    int folders = newCurrentFolder->getNrOfChildFolders();
    if (newCurrentFolder->getNrOfChildFolders() != 0)
    {
        for (int i = 0; i < folders; i++) 
        {
            newCurrentFolder = newCurrentFolder->getChildFolder(i);
            recursiveFolderSwitcher(newCurrentFolder);
        }
    } 
    newCurrentFolder->reset(); 
}

谢谢&lt; 3

1 个答案:

答案 0 :(得分:2)

您正在for循环中重新分配AFURLConnectionOperation AFHTTPRequestOperation AFHTTPRequestOperationManager

newCurrentFolder

这是最终的

newCurrentFolder = newCurrentFolder->getChildFolder(i);

改为重置最后一个孩子。

使用

newCurrentFolder->reset()

代替。

另外

folder* child = newCurrentFolder->getChildFolder(i);
recursiveFolderSwitcher(child);

是不必要的,for-statement将为您解决此问题。