gpt4 book ai didi

c++ - 什么时候会发生内存泄漏?

转载 作者:可可西里 更新时间:2023-11-01 15:19:33 25 4
gpt4 key购买 nike

我不知道该怎么想...

我们有一个作为服务运行的组件。它在我的本地机器上运行得很好,但在其他机器上(两台机器的 RAM 都等于 2GB)它开始在第二天和连续的几天生成 bad_alloc 异常。问题是进程的内存使用量保持在大约 50Mb 的水平。另一件奇怪的事情是,通过跟踪消息,我们已经将异常定位为从 stringstream 对象抛出,该对象向流中插入不超过 1-2 Kb 的数据。如果重要的话,我们会使用 STL-Port。

现在,当您遇到 bad_alloc 异常时,您认为这是内存泄漏。但是所有我们的手动分配都包含在智能指针中。此外,我不明白当整个进程仅使用 ~50Mb 时,stringstream 对象如何缺少内存(内存使用量每天保持近似恒定(并且肯定不会上升))。

我不能给你代码,因为这个项目真的很大,抛出异常的部分除了创建一个stringstream和<<一些数据然后记录它之外什么也没做。

所以,我的问题是......当进程仅使用 2GB 中的 50Mb 内存时,怎么会发生内存泄漏/bad_alloc?关于可能出错的地方,您还有哪些其他大胆的猜测?

在此先感谢,我知道这个问题很模糊等等,我只是有点绝望,我尽力解释了这个问题。

最佳答案

在您的描述中,一个可能的原因是您试图分配一些不合理的大块,因为您的代码中存在错误。像这样的东西;

 size_t numberOfElements;//uninitialized
if( .... ) {
numberOfElements = obtain();
}
elements = new Element[numberOfElements];

现在,如果 numberOfElements 未初始化,它可能包含一些不合理的大数字,因此您实际上尝试分配内存管理器拒绝分配的 3GB block 。

因此,可能不是您的程序内存不足,而是它试图分配比在最佳条件下可能允许的内存更多的内存。

关于c++ - 什么时候会发生内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4246281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com