相关疑难解决方法(0)

何时会发生内存泄漏?

我不知道在这里想些什么......

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

现在,当你得到一个bad_alloc异常时,你认为这是一个内存泄漏.但是我们所有的手动分配都包含在一个智能指针中.此外,当整个过程仅使用~50Mb(内存使用量每天保持不变(并且肯定不会上升))时,我无法理解stringstream对象如何缺少内存.

我无法为您提供代码,因为项目非常大,抛出异常的部分除了创建字符串流和<<某些数据然后记录它之外别无其他功能.

所以,我的问题是......当进程只使用2GB的50Mb内存时,如何发生内存泄漏/ bad_alloc?还有什么其他的猜测可能是错的?

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

c++ memory-leaks windows-xp

11
推荐指数
2
解决办法
2062
查看次数

程序以std :: bad_alloc终止

我正在运行一个C++程序,它std::bad_alloc在任意点死亡,这取决于指定的输入.以下是关于该计划的一些观察/观点:

  • 对于较短的运行(运行时间取决于输入),程序正常完成.这个问题只适用于较大的运行.
  • 该程序没有任何可检测的内存泄漏.对于较小的运行,使用Valgrind/Memcheck检查了这一点.此外,我的整个代码没有任何指针(所有动态分配都由库完成,例如,在std::vector和中std::string;这些库类中的分配失败),因此内存泄漏极不可能.
  • 几个对象在循环中分配,然后移动到容器.其中一些对象在程序即将结束之前一直存在.
  • 我怀疑堆碎片可能是一个问题(参见C++程序死于std :: bad_alloc,但是valgrind报告没有内存泄漏)但我在64位系统上使用64位编译器(特别是带有g ++的Linux)和堆碎片在64位的土地让我相信堆碎片不能成为64位系统的问题.

还有什么我应该尝试的吗?任何可以帮助的特定工具?还有其他建议吗?

更新:最后证明虚拟内存已经受到限制ulimit -v.我后来忘了这件事,因此内存耗尽.将其重新设置以unlimited解决问题.

c++ memory-management

4
推荐指数
1
解决办法
2922
查看次数

标签 统计

c++ ×2

memory-leaks ×1

memory-management ×1

windows-xp ×1