删除字符数组.替代方式
Delete char array. Alternative way?
可能重复:
对于char数组,是否需要调用delete[]vs delete?
char *p = new char[200];
delete p;
这种(我更改了var名称(代码来自一个大型商业项目。
第三行。这是对的吗?我该换还是留在那里。Coz没有这个和这个程序运行超过4年的错误报告。
谢谢。
您必须使用delete[]
,因为您使用了new[]
,这不是一个替代方案。
delete [] p;
-
如果
new
使用[]
,也必须删除:T *p = new T[100]; delete [] p; //correct delete p ; //incorrect
-
如果
new
不使用[]
,delete也不能使用它:T *p = new T; delete [] p; //incorrect delete p ; //correct
不正确并不意味着你会得到编译错误;这也不意味着程序必须在运行时失败。这意味着,程序行为是未定义的;任何事情都有可能发生,而且很可能会发生内存泄漏。
理论上,要遵循标准,第3行应为delete[] p;
。
但是,在实践中,这没有任何含义,因为char的析构函数什么都不做。
事实上,delete和数组delete之间的区别在于,使用数组delete,析构函数的调用次数与对象的调用次数一样多。对于常规删除,析构函数只调用一次。
最后,您应该将其替换为delete[] p;
您分配了一个带有operator new[]
的数组。你必须用operator delete[]
来平衡,而不是operator delete
:
delete[] p;
相关文章:
- 如何以优化的方式同时迭代两个间距不相等的数组
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- 在C++中,建议通过数组循环的方式是什么?
- 以这种方式初始化的 char 数组是否会自动添加空终止符?
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 如何以这种方式处理字符串数组
- 数组数据以错误的方式遍历 Python/Matlab
- 使用分而治之的最大总和子数组,为什么要以不同的方式使用 for 循环,答案是错误的?
- 使用字节数组具有单字节对齐方式的结构是否安全
- 有没有一种递归的方式来制作这个字符串数组?
- 以类似数组的方式访问结构成员:在与数组不同的结构中填充?
- C 结构具有CHAR数组以不寻常的方式初始化为零
- 动态规划 - 在数组中查找目标求和方式
- 我可以以某种方式使我的矢量/数组动态更改装置数量吗?
- 一维数组映射方式的性能差异问题
- 在动态 2-D 数组中填充 0 的更简洁的方式C++
- 我需要以尺寸方式计算数组的平均值
- 如何以递归方式反转任何数组?(不使用C++标准库)
- 在编译时以增量方式创建数组
- 为什么在指针和数组的情况下,字符数组的处理方式不同