Liu*_*ing 1 c++ memory-leaks stl vector deque
我有一个程序,我收集一些数据并暂时存储在双端队列中
typedef vector<float> floatVector;
...
floatVector * currRecord;
deque<floatVector *> data;
...
...
for (...)
{
...
currRecord = new floatVector(10);
data.push_back(currRecord);
}
Run Code Online (Sandbox Code Playgroud)
后来,我想将数据保存到文件中
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();
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是,这个程序会导致内存泄漏吗?我使用new
运算符为每个currRecord
向量分配内存.deque pop_front
功能会自动回收内存吗?或者我需要放
delete [] data[0]
Run Code Online (Sandbox Code Playgroud)
之前
data.pop_front();
Run Code Online (Sandbox Code Playgroud)
?另外,如果data
是向量而不是双端队列,那么一切都是一样的吗?谢谢!
你有一个std::deque
指针,每个指针拥有一个资源(内存).调用pop_front()
将从容器中删除指针,但它不会释放指针所拥有的内存.由于你分配内存,new
你也必须调用delete
.如果容器是a,则情况不变std::vector
.
如果您更改为std::deque<floatvector>
智能指针或容器,则可以避免内存泄漏std::shared_ptr
.
请注意,[]
在调用时没有使用,new
因此请使用delete
不带方括号的plain .