这会产生内存泄漏吗?

1 c++ memory-leaks

我正在读一本关于C++编程的书,我正在学习这些练习.一个练习要求我创建一个产生内存泄漏的程序.这个程序会产生这样的泄漏吗?

int main()
{
    int * pInt =  new int;
    *pInt = 20;

    pInt = new int;
    *pInt =50;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*our 5

考虑到这是一个微不足道的例子,没有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)

这证实了程序确实泄漏了内存.