1

我有一个程序,我在其中收集一些数据并将它们临时存储在双端队列中

    typedef vector<float> floatVector;
    ...
    floatVector * currRecord;
    deque<floatVector *> data;
    ...
    ...

    for (...)
    {
        ...
        currRecord = new floatVector(10); 
        data.push_back(currRecord);
    }

稍后,我想将数据保存到文件

    while (data.size() > 0) 
    {
        for (int i=0; i < 10; i++) 
        {
            fprintf(fPtr, "%lf\t", data[0]->at(i) );
        }
    fprintf(fPtr,"\n");
    data.pop_front();
    }

所以,我的问题是,这个程序会导致内存泄漏吗?我使用new运算符为每个currRecord向量分配内存。dequepop_front函数会自动回收内存吗?或者我需要把

    delete [] data[0]

    data.pop_front();

? 另外,如果data是向量而不是双端队列,一切都会一样吗?谢谢!

4

1 回答 1

6

你有一个std::deque指针,每个指针都拥有一个资源(内存)。调用pop_front()将从容器中删除指针,但不会释放指针拥有的内存。由于您分配内存,因此new您还必须调用delete. 如果容器是std::vector.

如果您更改为一个std::deque<floatvector>或一个智能指针容器,例如std::shared_ptr.

[]请注意,您在调用时没有使用,因此请使用没有方括号的new纯文本。delete

于 2012-07-19T05:42:09.390 回答