C++ 发布以提交向量列表

C++ 发布以提交向量列表,c++,vector,C++,Vector,我使用结构向量来创建一种最小的文件系统。入口点是一个由MTP管理的文件系统结构,但它包含大量数据,而且它还迫使我部署MTP内容,即使是在高层 我所做的是解析MTP提供的文件列表,并将一个struct向量归档 以下是我在cpp文件中的内容 std::vector<FileObject*> mtp_wrapper::ListsOfFirstLevel(uint32_t idx) { std::vector<FileObject*> ListOfObjects;

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

我所做的是解析MTP提供的文件列表,并将一个struct向量归档

以下是我在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;
}
文件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)