如果给定一个指向数组中间的指针,delete[]会做什么?
What does delete[] do if given a pointer to the middle of an array?
下面的代码会发生什么?
int *p1 = new int[100];
int *p2 = &p1[50];
delete [] p2;
我听说有些new实现将数组的大小存储在第(-1)个数组索引中,但是在上面的情况下不会出现可怕的错误吗?
事情肯定会出错!
delete []操作符被定义为只作用于正确的数组指针。这里的"适当"指的是,它必须接收一个指针,该指针必须先前被初始化,指向内存中使用new操作符创建数组的位置。你也不应该混用new/delete和malloc/free。通常,删除已分配给new
的内存,并且释放已分配给malloc
(及其派生)的内存
相关文章:
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- C++原始指针和"delete"
- 基类指针:在哪里使用 new 和 delete
- 如何避免自定义 STL 向量类的智能指针 delete[] 异常?
- 为什么在C++中使用delete后指针不为NULL
- delete运算符如何处理c中的指针
- C++:为什么可以在没有事先使用 new 的情况下在指向结构的指针上使用 delete?
- 为什么当我在同一内存中各有两个指针时,我必须调用"delete"两次?
- 这些指针中的哪一个需要免费()或delete()
- 对不完整类型的空指针调用delete合法吗
- ::运算符 delete(指针) 返回释放的字节大小
- 复制指针,然后调用 delete
- 在delete()之后不会断言两个指针都指向NULL
- Delete无法识别列表中的指针分配
- delete不会将0分配给指针
- 在“delete”之后重复使用指针
- 如果我对对象调用 delete,矢量中的对象指针是否被删除
- 在c++中,Delete指针和重新分配给出了相同的结果
- 什么是delete指针,指针=0;表述功?它清除内存两次吗?
- 指针错误,在delete[]指针中中断