如何释放数组的 N 个元素的内存

qsp*_*qsp 1 c++

与我正在修复的2004 年程序相关。前开发人员使用以下代码在析构函数中释放数组的“len”元素:

unsigned int* _data;  
...  
if (_data) {
  int len = size();
  delete (unsigned int[len]) _data;
}
Run Code Online (Sandbox Code Playgroud)

我无法用我的编译器编译这段代码。错误信息是:

错误:ISO C++ 禁止转换为数组类型 'unsigned int [(((unsigned int)(((int)l) + -0x00000000000000001)) + 1)]'

一定有他不使用的原因delete _data;我应该如何解决这个错误?
谢谢。

das*_*ght 5

我应该如何解决这个错误?

删除演员表,并寻找_data已分配的地方。

  • 如果已分配为new [someLength],则替换为delete[] _data;
  • 否则(尽管这不太可能)替换为delete _data.

从长远来看,最好使用动态容器,例如std::vector<unsigned int>,而不是动态分配原语数组。不过,我知道这可能超出了您当前重构的范围。

  • @koodawg:它的不同之处在于它是正确的,并且不会调用未定义的行为。非常重要的区别,imo。 (2认同)