1

问题如上;例如,如果我有,int* ptr = new int[10]并且在将一些数据操作ptr设置为第二个、第三个、第五个或最后一个元素之后,调用delete[] ptr会是正确的吗?在手册中找不到。

4

3 回答 3

5

不,传递给delete[]操作员的参数必须指向与返回的地址相同的地址new[]

(假设你没有超载delete[]new[]做一些疯狂的事情)

于 2013-11-03T16:16:23.807 回答
2

来自 C++ 参考手册delete[]请注意,无效的 ptr 值会导致未定义的行为。
因此,不建议直接操作指向您分配的内存的指针!

于 2013-11-03T16:18:20.520 回答
2

说明书上找不到

C++11 3.7.4.2/3 说

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

于 2013-11-03T17:47:24.857 回答