c++ - 如果我在 C++ 中删除了一次数组,但分配了多次怎么办?

标签 c++ arrays memory memory-management new-operator

假设我有以下代码段。

int main()
{
    int num;
    int* cost;
    while(cin >> num)
    {
        int sum = 0;
        if (num == 0)
          break;

        // Dynamically allocate the array and set to all zeros
        cost = new int [num];
        memset(cost, 0, num);
        for (int i = 0; i < num; i++)
        {
            cin >> cost[i];
            sum += cost[i];
        }
        cout << sum/num;
    }
`  `delete[] cost;
    return 0;
}

虽然我可以在 while 循环内移动 delete 语句 对于我的代码,为了理解目的,我想知道代码在编写时会发生什么。每次我使用运算符 new 时,C++ 是否分配不同的内存空间?

操作符delete是否只删除last分配的cost数组?

最佳答案

Does C++ allocate different memory spaces each time I use operator new?

是的。

Does operator delete only delete the last allocated cost array?

是的。

您丢失了指向其他人的唯一指针,因此它们被不可挽回地泄露了。为避免这个问题,不要玩弄指针,而是使用 RAII自动管理动态资源。 std::vector 在这里将是完美的(如果您确实需要一个数组;您的示例可以继续读取并重复使用单个 int)。

关于c++ - 如果我在 C++ 中删除了一次数组,但分配了多次怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30352206/

相关文章:

c++ - 巨大的静态数组与函数内的局部数组

c# - 如何在 C# 中创建与键 (userID) 配对的固定长度字符串数组(聊天消息)

php - 逗号后加空格

c# - 从 C# 启动进程时无法将自定义数量的 ram 分配给 java

c++ - 使用 SinkWriter(媒体基础)c++ 时发生内存泄漏

c++ - 通过引用传递错误:const boost::system::error_code error

c++:继承具有不同(但协变)返回类型的方法

C++获取编译代码中使用的一部分代码的大小

arrays - Haskell repa - 如何减少数组并返回索引?

memory - 在不复制内存的情况下重复 pytorch 张量