假设我有以下代码段。

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是否仅删除最后分配的cost数组?

最佳答案



是。



是。

您丢失了指向其他对象的唯一指针,因此它们不可避免地泄漏了。为避免此问题,请不要弄乱指针,而应使用RAII自动管理动态资源。 std::vector在这里是完美的(如果您实际上确实需要一个数组;您的示例可以继续阅读并重复使用一个int)。

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

10-16 04:57