提交矢量列表的问题

Issue to file a vector list

本文关键字:问题 列表 提交      更新时间:2023-10-16

>我正在使用结构向量来创建一种最小的文件系统。入口点是由MTP管理的文件系统结构,但它包含大量数据,并且即使在高级别也迫使我部署mtp内容。

我所做的是解析MTP提供的文件列表并提交结构向量。

这是我在 cpp 文件中的内容

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;
}

文件对象在头文件中声明,如下所示

struct FileObject {
    uint32_t itemid;
    bool isFolder;
    char *filename;
    uint64_t filesize;
    LIBMTP_filetype_t filetype;
    uint32_t location;
    uint32_t parent_id;
    time_t lastmodified;
};

归档 FSitem 的代码工作正常,FSItem 文件正确,但在结束时,ListOfOjects 为空。 似乎push_back失败了...

       ListOfObjects.push_back(FSitem);
       // free(FSitem)

你为什么免费 FSItem ?你有一个 std::vector 的指针。调用 push_back 时,将指针复制到向量中的项。项目未移动且未被复制。如果释放FSItem,则删除对象,然后向量中的指针将无效。