c++ - 为什么动态内存在超出范围时不被清理

标签 c++ memory-management memory-leaks

我刚开始玩 C++(熟悉其他语言),我想知道一些事情。

例如,当使用 new 创建一个动态大小的数组时,为什么它在超出范围时不会被删除,但具有固定大小的数组会被删除?

例如使用以下代码:

int foo()
{
    int baz[5]; // Gets removed out of scope
    int *bar = new int[5]; // Does not get removed, becomes a leak
}

因为 baz 和 bar 都是指向数组开头的指针,“运行时环境”不能对具有固定大小作为动态大小?

它不能做这样的事情有什么区别。

最佳答案

Why does dynamic memory not get cleaned when it is out of scope

因为动态内存的目的在作用域结束后分配。当您需要在一个范围内分配内存,然后在另一个范围内使用和取消分配它时,将使用动态内存。

关于c++ - 为什么动态内存在超出范围时不被清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21408730/

相关文章:

c++ - 是否不可能将 STL 映射与结构一起用作键?

c++ - 从哪里开始计算机视觉

iphone - 分配属性(property)

c++ - curl_easy_cleanup 不释放资源

c++ - 将智能指针作为参数传递给函数

android - 这段代码会导致 kotlin 内存泄漏吗

c - 使用 Valgrind 检查后如何查找和删除我的 C 程序中的内存泄漏和错误

c++ - 在 QFileDialog::getSaveFileName 中指定默认扩展名

c++ - 如果异常保存在 std::exception_ptr 中,那么在 catch 语句之外使用异常是否安全?

python - 使用boost python返回ndarray字典导致内存泄漏