在这种情况下,数组a会被取消分配吗
Will array a get de-allocated in this case?
重新定位数组指针是否会影响delete运算符的工作?
案例(1(
int main(){
int *a = new int[5];
a++; a--;
delete[] a;
return 0;
}
案例(2(
int main(){
int *a = new int[5];
a++;
delete[] a;
return 0;
}
案例(3(
int main(){
int *a = new int[5];
a++;
delete[] a;
a--;
delete[] a;
return 0;
}
编辑:[案例2和3]未定义。操作员可能会根据地址搜索要取消分配的对象,但找不到。不要在家里尝试;(
点击此处阅读更多信息。
原始问题的原始答案——针对案例1——:您的代码并没有真正重新定位数组;最终,传递给delete[]操作员的地址与新[]操作员分配的地址相同(并由新[]操作员返回(。总体而言,此处delete[]的功能是安全和定义的。
相关文章:
- C++:检查动态取消分配是否正常工作
- 使用 delete [] 运算符取消分配类中数据成员的内存
- 取消分配动态分配的字符数组的析构函数
- 我们应该在抛出异常之前取消分配内存吗
- 在这种情况下,数组a会被取消分配吗
- 在可拆卸线程完成操作时取消分配内存
- 是否避免因变量作用域而取消分配
- 在访谈中,用C++编写两个函数来分配和取消分配int数组
- 从私有类变量中取消分配内存
- C/C++:取消分配或删除动态创建的内存块
- "Delete"不取消分配动态内存
- 取消分配包含字符串变量的结构
- 从堆栈和堆中取消分配内存
- 加载程序如何从动态模块分配/取消分配静态数据
- 正确分配和取消分配指向对象的指针的二维数组
- VS2012静态代码分析器在取消分配内存向量时给出误报
- 如何取消分配在此函数中创建的内存
- 在Java中取消分配分配给对象的内存
- 是否需要取消分配基元数组
- 如何在标准模板库中分配/取消分配对象