C++ 发布以提交向量列表
我使用结构向量来创建一种最小的文件系统。入口点是一个由MTP管理的文件系统结构,但它包含大量数据,而且它还迫使我部署MTP内容,即使是在高层 我所做的是解析MTP提供的文件列表,并将一个struct向量归档 以下是我在cpp文件中的内容C++ 发布以提交向量列表,c++,vector,C++,Vector,我使用结构向量来创建一种最小的文件系统。入口点是一个由MTP管理的文件系统结构,但它包含大量数据,而且它还迫使我部署MTP内容,即使是在高层 我所做的是解析MTP提供的文件列表,并将一个struct向量归档 以下是我在cpp文件中的内容 std::vector<FileObject*> mtp_wrapper::ListsOfFirstLevel(uint32_t idx) { std::vector<FileObject*> ListOfObjects;
std::vector<FileObject*> mtp_wrapper::ListsOfFirstLevel(uint32_t idx) {
std::vector<FileObject*> ListOfObjects;
LIBMTP_file_t *AllFiles;
LIBMTP_file_t *file;
AllFiles = getListOfFiles();
file = AllFiles;
while(file !=NULL) {
LIBMTP_file_t *oldfile;
FSitem = new FileObject();
if(file->parent_id == idx) {
FSitem->filename = file->filename;
FSitem->filesize = file->filesize;
if(file->filetype == LIBMTP_FILETYPE_FOLDER)
FSitem->isFolder = true;
else
FSitem->isFolder = false;
FSitem->itemid = file->item_id;
FSitem->parent_id = file->parent_id;
FSitem->lastmodified = file->modificationdate;
ListOfObjects.push_back(FSitem);
// free(FSitem)
}
oldfile = file;
file = file->next;
LIBMTP_destroy_file_t(oldfile);
}
return ListOfObjects;
}
文件FSitem的代码工作正常,FSitem文件正确,但在while结束时,ListOfOjects为空。好像推回失败了
ListOfObjects.push_back(FSitem);
// free(FSitem)
你为什么要免费购买这项商品?您有一个std::指针向量。调用push_back时,将指针复制到向量中的项目。该项目尚未移动,也未被复制。如果释放
FSItem
,则删除对象,然后向量中的指针将无效。在调试器中逐行遍历代码,以查看发生了什么。可能条件file->parent\u id==idx
从来都不是真的?当parent\u id==idx
为假时,就会发生泄漏。您不需要使用指针,一个向量就足够了。另外,请记住,对于文件名成员,您正在复制一个指针,如果该指针在某个地方被释放(例如LIBMTP\u destroy\u file\t
),那么您就有一个错误的指针。此外,由于您有一个链表,您真的应该在列表中的每个节点上调用LIBMTP\u destroy\u file\u t
,而不是在整个列表上调用吗?[offtopic]您真的不应该大写变量名。这只是一个惯例,但每个人都遵循它,这有助于可读性。将类型名称大写。即使stackoverflow上的语法分析器也假设所有以大写字母开头的东西都是一个类型名。我不会释放它。这是评论。
ListOfObjects.push_back(FSitem);
// free(FSitem)