删除数组

时间:2014-06-29 03:13:30

标签: c++ arrays

让我们假设以下代码:

    int* ptr = new int[10];
    ...
    ...
    ptr += 2;
    delete[] ptr;
    ptr = NULL;

当调用delete时,ptr是否应该指向数组的第一个元素?

1 个答案:

答案 0 :(得分:3)

如果您对delete取消的某些内容发出new,那就是未定义的行为

因此以下代码的结果未定义:

int* ptr = new int[10];
ptr += 2;
delete[] ptr;

让我们看看标准:

  

C ++ 2011.第3.7.4.2节解除分配函数。第3段。

     

否则,如果标准库中提供给operator delete(void*)的值不是之前调用标准operator new(std::size_t)operator new(std::size_t, const std::nothrow_t&)返回的值之一,则行为未定义如果标准库中提供给operator delete[](void*)的值不是先前在标准库中调用operator new[](std::size_t)operator new[](std::size_t, const std::nothrow_t&)返回的值之一,则行为未定义。