我正在读一本关于C++编程的书,我正在学习这些练习.一个练习要求我创建一个产生内存泄漏的程序.这个程序会产生这样的泄漏吗?
int main()
{
int * pInt = new int;
*pInt = 20;
pInt = new int;
*pInt =50;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
考虑到这是一个微不足道的例子,没有delete与你配对new是一个泄漏.在这种情况下,为了防止泄漏,您需要以下内容:
int * pInt = new int;
*pInt = 20;
delete pInt ;
pInt = new int;
*pInt =50;
delete pInt ;
Run Code Online (Sandbox Code Playgroud)
用于检测内存泄漏的一个不错的工具是Valgrind.我在你的示例代码上运行了这个工具,如下所示:
valgrind ./a.out
Run Code Online (Sandbox Code Playgroud)
这是它产生的输出的一部分:
==14153== HEAP SUMMARY:
==14153== in use at exit: 8 bytes in 2 blocks
==14153== total heap usage: 2 allocs, 0 frees, 8 bytes allocated
==14153==
==14153== LEAK SUMMARY:
==14153== definitely lost: 8 bytes in 2 blocks
Run Code Online (Sandbox Code Playgroud)
这证实了程序确实泄漏了内存.
| 归档时间: |
|
| 查看次数: |
313 次 |
| 最近记录: |