4

new [] で Microsoft 固有の _msize() 関数を使用しても安全ですか?

例:

  int* i = new int[100];      
  size_t s = _msize(i);    
  cout << "Size of the array in bytes: " << s << endl;
  delete [] i;

MSDNでは、malloc & Co. の使用法についてのみ説明しています。

Visual Studio 2010 でコードをテストしたところ、動作するようです。しかし、予想される問題や特別なケースがあるかどうかを知りたいですか?

4

3 に答える 3

4

誰かがoperator newあなたのタイプをオーバーライドすると、問題が発生する可能性があります。

書き方は同じくらい簡単です

const size_t s = 100;
int* i = new int[s];

または、実際に C++ を書く場合

std::vector<int>   i(100);
于 2012-07-27T12:04:00.883 に答える
3

_msize関数は、calloc、malloc、またはreallocの呼び出しによって割り当てられたメモリブロックのサイズをバイト単位で返します。

したがって、operator newによって実装されている場合はmalloc()、機能します。そうしないと、またはoperator newオーバーライドされた場合、問題が発生します。

于 2012-07-27T12:05:20.447 に答える
3

operator new[]によって実現された場合にのみ、正しく動作しますmalloc & Co.

于 2012-07-27T12:03:21.243 に答える