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