创建另一个对象时出现内存错误
Memory error when creating another object
所以我必须实现一个像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
副本将获得自己的向量。
相关文章:
- 内存错误低于在C++年实现埃拉托色尼筛分时的预期
- 将 vector<vector<int>> 传递到函数中会产生内存错误
- 为什么删除分配的阵列会导致内存错误?
- 自定义哈希表实现-将字符串映射到整数时出现内存错误
- 需要找到3个小错误-内存错误
- 从'deleted function'获取内存错误
- OpenGL, GLFW, GLAD. glViewport(0, 0, 800, 600) 抛出内存错误
- 销毁 std::queue 会导致内存错误
- 加速进程间:管理共享内存错误
- 删除映射中的指针会导致内存错误
- 由于从 std::map 派生的类中的 std::map 迭代器导致的内存错误
- 当我用clang编译代码时,GCOV会出现内存错误
- 查找素数和时出现内存错误
- 循环链表的内存错误:未分配正在释放的指针
- 为什么我会因Valgrind遇到内存错误?(C ,抽象语法树评估)
- 我如何解析包含65k行的代码的文件,导致[BCC32致命错误] F1008出于内存错误
- 动态内存错误
- 内存错误C 私有INT
- 无法在 Mac OS X 上分配内存错误 - java(xx,xx) malloc: *** mmap(size=XX)
- 类对象的可变级别内存错误检测