我只是想知道如何使用C++创建系统内存泄漏.我已经对此进行了一些谷歌搜索,但没有多少提出来,我知道在C#中实现它并不是真的可行,因为它是托管代码但是想知道是否有一种简单的方法可以用C++做到这一点?我只是觉得有趣的是看到系统因为代码编写不当而遭受多少损失.谢谢.
Sta*_*ked 26
当您稍后调用new而不调用相应的内容时,会发生内存泄漏delete.如下面的示例代码所示:
int main() {
// OK
int * p = new int;
delete p;
// Memory leak
int * q = new int;
// no delete
}
Run Code Online (Sandbox Code Playgroud)
Pup*_*ppy 14
int main() {
while(true) new int;
}
Run Code Online (Sandbox Code Playgroud)
内存泄漏有很多种:
分配的内存是无法释放的,因为没有任何内容指向它.
在C和C++中很容易创建这种泄漏.它们也很容易预防,易于检测,易于治愈.因为它们易于检测,所以有许多工具,免费和商业,以帮助找到这种泄漏.
仍然可以访问的分配内存应该很久以前就已经发布了.
这些类型的泄漏更难以检测,预防或治愈.还有一些东西指向它,它最终会被释放- 例如,就在之前exit().从技术上讲,这不是一个泄漏,但出于所有实际目的,这是一个泄漏.许多据称无泄漏的应用程序都有这样的泄漏.您所要做的就是运行系统配置文件,以查看一些愚蠢的应用程序消耗更多的内存.即使在托管语言中,这些类型的泄漏也很容易创建.
首先应该永远不会分配的分配内存.
示例:用户可以轻松地要求Matlab创建这些类型的泄漏.Matlab在创建这类泄漏方面也非常积极.当Matlab从中获取失败时,malloc它会进入一个等待一段时间然后重试的循环malloc.同时,操作系统疯狂地尝试通过将程序块从实内存中移入虚拟内存来处理内存丢失.最终一切都在虚拟内存中 - 一切都悄然停滞.
| 归档时间: |
|
| 查看次数: |
27406 次 |
| 最近记录: |