【发布时间】:2023-04-06 18:56:01
【问题描述】:
与我正在修复的 the program from 2004 相关。前开发人员使用以下代码在析构函数中释放数组的 'len' 元素:
unsigned int* _data;
...
if (_data) {
int len = size();
delete (unsigned int[len]) _data;
}
我无法用我的编译器编译此代码。错误信息是:
错误:ISO C++ 禁止转换为数组类型‘unsigned int [(((unsigned int)(((int)l) + -0x00000000000000001)) + 1)]’
他不使用@987654323一定是有原因@我应该如何解决这个错误?
谢谢。
【问题讨论】:
-
那个代码当时毫无意义,现在也毫无意义。您的编译器更擅长捕捉这种暴行。只需
delete[] _data。 -
首先不使用手动动态分配;使用
std::vector<unsigned int>。如果您想手动清除它,请执行以下操作:clear()。 -
原因可能是无知。其余代码是否让您认为他知道自己在做什么?
-
鉴于上面的cmets,当提到代码来自2004年编写的应用程序并且没有人接触时,不要试图建议不要使用数组,使用向量等到现在为止。在大多数公司中,进行不在范围内的更改是不可接受的。如果你的情况不是这样,那么我猜你正在做一些对业务而言不是那么重要的事情。
-
@Jagannath:如果您的公司阻止您进行这些更改,您可以忽略这些建议。对于其他阅读该问题的人,该建议很有用。
标签: c++