Arm*_*yan 11 c++ memory-leaks windows-xp
我不知道在这里想些什么......
我们有一个作为服务运行的组件.它在我的本地机器上运行得非常好,但是在其他一些机器上(两台机器RAM都等于2GB),它会在第二天和连续几天开始生成bad_alloc异常.问题是该过程的内存使用量保持不变,大约为50Mb级别.另一个奇怪的事情是,通过跟踪消息,我们已经定义了从stringstream对象抛出的异常,该对象只会向流中插入不超过1-2 Kb的数据.如果重要的话,我们正在使用STL-Port.
现在,当你得到一个bad_alloc异常时,你认为这是一个内存泄漏.但是我们所有的手动分配都包含在一个智能指针中.此外,当整个过程仅使用~50Mb(内存使用量每天保持不变(并且肯定不会上升))时,我无法理解stringstream对象如何缺少内存.
我无法为您提供代码,因为项目非常大,抛出异常的部分除了创建字符串流和<<某些数据然后记录它之外别无其他功能.
所以,我的问题是......当进程只使用2GB的50Mb内存时,如何发生内存泄漏/ bad_alloc?还有什么其他的猜测可能是错的?
在此先感谢,我知道这个问题很模糊,我只是有点绝望,我尽力解释这个问题.
在您的描述中,一个可能的原因是您尝试分配一些不合理的大块,因为代码中存在错误.像这样的东西;
size_t numberOfElements;//uninitialized
if( .... ) {
numberOfElements = obtain();
}
elements = new Element[numberOfElements];
Run Code Online (Sandbox Code Playgroud)
现在如果numberOfElements没有初始化它可能包含一些不合理的大数字,所以你有效地尝试分配一个说3GB的块,内存管理器拒绝这样做.
所以它可能不是你的程序内存不足,而是它试图分配比在最佳条件下可能允许的内存更多的内存.
bad_alloc并不一定意味着内存不足。由于堆已损坏,分配函数也可能会失败。您可能会遇到一些缓冲区溢出或代码写入已删除的内存等情况。
您还可以使用Valgrind或其Windows 替代品之一来查找泄漏/溢出。