C++ delete[]运算符的参数能否指向数组的非第一个元素?
问题如上所述;例如,如果我有C++ delete[]运算符的参数能否指向数组的非第一个元素?,c++,delete-operator,C++,Delete Operator,问题如上所述;例如,如果我有int*ptr=new int[10]并且在对数据进行一些操作后ptr设置为第二、第三、第五或最后一个元素,调用delete[]ptr是否正确?在手册里找不到 否,传递给delete[]运算符的参数必须指向new[] (假设您没有重载delete[]和new[]来做一些疯狂的事情)否,传递给delete[]运算符的参数必须指向new[] (假设您没有超载)> C++ > [>代码> >代码>新[]/COND>做一些疯狂的事情)< P>从C++参考手册中注意:PTR的无
int*ptr=new int[10]
并且在对数据进行一些操作后ptr
设置为第二、第三、第五或最后一个元素,调用delete[]ptr
是否正确?在手册里找不到 否,传递给delete[]
运算符的参数必须指向new[]
(假设您没有重载
delete[]
和new[]
来做一些疯狂的事情)否,传递给delete[]
运算符的参数必须指向new[]
<>(假设您没有超载)> C++ > [>代码> >代码>新[]/COND>做一些疯狂的事情)< P>从C++参考手册中注意:PTR的无效值导致了未定义的行为。
因此,不建议直接操作分配内存的指针 >从C++参考手册中注意:PTR的无效值会导致未定义的行为。 因此,不建议直接操作分配内存的指针 在手册里找不到 C++11 3.7.4.2/3说 如果标准库中提供给运算符
delete[](void*)
的值不是标准库中先前调用operator new[](std::size\u t)
或operator new[](std::size\u t,const std::nothrow\u t&)返回的值之一,则行为未定义
在手册里找不到
C++11 3.7.4.2/3说
如果标准库中提供给运算符delete[](void*)
的值不是标准库中先前调用operator new[](std::size\u t)
或operator new[](std::size\u t,const std::nothrow\u t&)返回的值之一,则行为未定义
以下是参考资料:。ptr
参数到delete[]
必须是以前由new[]
返回的指针或空指针。否,必须使用原始地址删除。在内部,new[]
的一个常见实现将数组的大小放在分配的内存之前,因此delete[]
(查看您给它的地址后面)会查看数组大小的错误内存部分,造成严重破坏:-)谢谢:)因此它可以像我预期的那样工作。我只是找不到正式记录。以下是参考:。ptr
参数到delete[]
必须是以前由new[]
返回的指针或空指针。否,必须使用原始地址删除。在内部,new[]
的一个常见实现将数组的大小放在分配的内存之前,因此delete[]
(查看您给它的地址后面)会查看数组大小的错误内存部分,造成严重破坏:-)谢谢:)因此它可以像我预期的那样工作。我只是找不到正式的记录。