问题如上;例如,如果我有int* ptr = new int[10]
,并且在将数据ptr
的某些操作设置为第2个,第3个第5个或最后一个元素后,调用delete[] ptr
是否正确?在手册中找不到它。
答案 0 :(得分:5)
不,传递给delete[]
运算符的参数必须指向new[]
(假设你没有超载delete[]
和new[]
做一些疯狂的事情)
答案 1 :(得分:2)
从C ++参考手册delete[]:请注意,ptr的无效值会导致未定义的行为。
因此,不建议直接操作指向已分配内存的指针!
答案 2 :(得分:2)
在手册
中找不到
C ++ 11 3.7.4.2/3说
如果标准库中提供给operatordelete[](void*)
的值不是之前在标准库中调用operator new[](std::size_t)
或operator new[](std::size_t, const std::nothrow_t&)
返回的值之一,则行为未定义< / p>