gpt4 book ai didi

c++ - 从堆和内存泄漏中删除 C++ 数组

转载 作者:可可西里 更新时间:2023-11-01 16:08:59 30 4
gpt4 key购买 nike

我有一个关于从堆内存中删除数组的问题。在一本书和 this blog 以及其他资源 such as this one 中,我读到要从堆中删除数组,我们必须在 delete 关键字之后使用 [] ,这样如果我们不要使用 [] 我们会泄漏内存。

例如,考虑下面的代码。

//constructing array
int *s = new int[10];


// deleting array from heap
delete [] s;

我通过使用 valgrind 包在 Linux 中测试了这个小程序,以检查我们有多少内存泄漏是由错误的编码引起的。在 Linux 中通过以下命令,我看到一切正常

sudo valgrind --leak-check=full ./<path_to_exe_file>

这是Linux命令的输出

 ==4565== HEAP SUMMARY:
==4565== in use at exit: 0 bytes in 0 blocks
==4565== total heap usage: 1 allocs, 1 frees, 40 bytes allocated
==4565==
==4565== All heap blocks were freed -- no leaks are possible

但是,当我尝试在不使用 [] 的情况下使用 delete 时,我的问题出现了。 valgrind 的输出显示所有堆内存已被释放。这个对吗?或者 valgrind 没有意识到堆没有被释放并且数组的某些部分仍然在那里!!?如果 valgrind 无法检测到这种内存泄漏,是否有任何其他包可以检测到这种情况?

最佳答案

在不使用 [] 的情况下对数组调用 delete 会导致未定义的行为。未定义的行为可能是数组被正确删除,这似乎是您观察到的。但是,您不能依赖于此。

关于c++ - 从堆和内存泄漏中删除 C++ 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47111302/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com