创建另一个对象时出现内存错误

Memory error when creating another object

本文关键字:内存 错误 一个对象 创建      更新时间:2023-10-16

所以我必须实现一个像linux这样的文件夹和文件系统。

我的文件夹对象包含一个包含文件夹对象的矢量,另一个包含文件。当我尝试将第二个新项目添加到文件夹对象中的文件夹矢量时,我收到内存错误。我相信我可以意外删除某些内容,但我只是不知道在哪里可能。

main(24984,0x7fff7d486300) malloc: * 对象 0xe000000000000000 的错误:未分配正在释放的指针 * 在malloc_error_break中设置断点进行调试 中止陷阱:6

这是我的过程代码:

        Folder *currentF=new Folder("Home",NULL);
        cout<<"Enter name of new directory: "<<endl;
        string tempdirName;
        cin>>tempdirName;
        Folder *folder2=new Folder(tempdirName,currentFolder);
        currentFolder->addFold(*folder2);

文件夹.h 文件

class Folder{
private:
    string name;
    vector<File> *files;
    vector<Folder> *folders;
    Folder *upper; //the folder above this one in the tree
public:
    Folder();
    Folder(string n, Folder *u);
    string getName();
    vector<File> *getFiles();
    vector<Folder> *getFolders();
    Folder *getUpper();
    void addFold(Folder f);
    void delFold(Folder f);
    void setUpper();
    ~Folder();
};

文件夹.cpp

Folder::Folder(string n, Folder *u){
name=n;
upper=u;
files=new vector<File>();
folders=new vector<Folder>();
}
string Folder::getName(){
    return name;
}
vector<File> *Folder::getFiles(){
return files;
}
vector<Folder> *Folder::getFolders(){
    return folders;
}
Folder *Folder::getUpper(){
    return upper;
}
void Folder::addFold(Folder f){
    folders->push_back(f);
}
Folder::~Folder(){
    delete files;
    delete folders;
    upper=NULL;
    delete upper;
}

完成后,我尝试制作文件夹2 = NULL。什么也没做。我什至注释掉了~Folder()中的一些行,但它仍然不起作用。 我仍然以内存泄漏告终。

void Folder::addFold(Folder f){
    folders->push_back(f);
}

这不可能奏效。push_back函数创建矢量拥有的指定Folder的副本。但是现在f和向量中新创建的Folder都认为他们拥有完全相同的向量(*(f->files)*(f->folders))。销毁f时,其析构函数将删除这些向量。当folders被销毁时,它的析构函数也会删除那些相同的向量,从而产生您看到的错误。

这就是三法则存在的原因。如果您有析构函数,则可能需要复制构造函数和复制赋值运算符。但实际上,这里根本没有理由使用指针。只需直接使用矢量即可。这样,放置在folders中的f副本将获得自己的向量。