【问题标题】:Thread with and without a memory leak有和没有内存泄漏的线程
【发布时间】:2011-10-14 14:17:43
【问题描述】:

我遇到了一个 c++ 分配问题,我应该创建一个简单的线程和另一个具有相同逻辑但也有内存泄漏的线程。

这应该只是一个简单的线程示例,即使它本身没有做任何有用的事情。所以我想我的问题是,可以在 c++ 中创建的最简单的线程是什么,如果我正确理解要使其泄漏内存,我应该创建一个永远不会删除的变量? 也应该将此“泄漏”放置在一个循环中或以其他方式重复...因为对我来说,只保留一个未删除的变量似乎不是一个重大泄漏。

【问题讨论】:

  • 什么操作系统?你可以使用任何库吗?哪个版本的 C++?
  • windows (7) 将是首选,一切都允许...但越简单越好...我不确定 c++ 版本,但我使用的是 microsoft visual c++ 2010 express
  • 一种原生方式是CreateThread,但我也推荐boost::thread

标签: c++ memory-leaks


【解决方案1】:

这足以泄漏:

new char;

如果你想要更多,你可以把它放在一个循环中,但要小心 -

while( true ) {
    new char;
}

使大多数系统很快停止运行 - 它们开始交换并且几乎无法使用。 IMO,除非您有其他特定要求,否则您应该坚持泄漏几个对象。

【讨论】:

  • 谢谢,这个while循环足以引发内存耗尽的错误,但我也想知道如何在这个while“周围”构造一个线程。
【解决方案2】:

您总是可以分配一个大对象(例如一个大缓冲区)而从不释放它;这样一来,单次分配就会造成严重的内存泄漏。

同样,如果您有一个线程被设计为某种经常调用的工作线程,并且那里有少量内存泄漏,那么在您的程序运行时,您很容易通过“千次切割死亡”而遇到内存问题" 样式泄漏。

【讨论】:

    【解决方案3】:

    有一个 Boost Thread 库,它可能是 C++ 中线程最简单的选择。是的,内存泄漏只是一个未删除的变量。如果您不想要单变量内存泄漏,只需分配您认为必要的任何大小的数组。 new char[x],其中 x 是你想要的内存泄漏字节数

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 1970-01-01
      • 2014-10-29
      • 2013-12-18
      • 2011-11-05
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      相关资源
      最近更新 更多