1

私が修正している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)] へのキャストを禁止しています'</p>

彼が使用しなかった理由があるに違いありませんdelete _data;。このエラーを修正するにはどうすればよいですか?
ありがとう。

4

2 に答える 2

5

このエラーを修正するにはどうすればよいですか?

_dataキャストを削除し、割り当てられている場所を探します。

  • として割り当てられている場合はnew [someLength]、に置き換えますdelete[] _data;
  • それ以外の場合 (可能性は低いですが) に置き換えdelete _dataます。

長期的にはstd::vector<unsigned int>、プリミティブの配列の動的割り当てよりも、 などの動的コンテナーを使用することをお勧めします。ただし、これが現在のリファクタリングの範囲を超えている可能性があることは理解しています。

于 2013-09-11T22:39:57.947 に答える