队列中pop()上的内存浪费
memory wastage on pop() in queue
我想问,当调用queue.pop()时,内存是否被释放?因为在堆栈中,我们只是增加或减少指针,但内存仍然不会被释放。
问题是:WAP打印一个大日志文件的最后n行
我正在保存队列中的行,然后在计数>n时弹出行。
这是一个很好的编码练习吗
如果没有,可以做些什么来释放内存?
我编码的是:
#include<iostream>
#include<queue>
#include<fstream>
using namespace std;
void lastN(char *fileName, int N)
{
queue<string> q;
int count=0;
string line;
ifstream mf(fileName);
if(mf.is_open())
{
while(!mf.eof())
{
getline(mf,line);
count++;
q.push(line);
if(count>N)q.pop();
}
mf.close();
}
else cout<<"cannot open filen";
count=1;
while(q.size())
{
printf("line no %2d :: ",count++);
cout<<q.front()<<endl;
q.pop();
}
cout<<endl;
}
int main(void )
{
char *fileName="file.txt";
ofstream mf(fileName);
if(mf.is_open())
{
mf<<"line 0";
mf<<"line 1nline 2nline 3nline 4nnn";
mf.close();
}
else cout<<"cannot create filen";
lastN(fileName,5);
getchar();
return 0;
}
您的queue
按值保存string
对象,因此调用pop
将破坏字符串并释放与其相关的内存。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 类型总是使用其大小存储在内存中吗
- Stack.pop 内存管理
- 队列中pop()上的内存浪费