【问题标题】:Is it safe to use _msize with new[]?将 _msize 与 new[] 一起使用是否安全?
【发布时间】:2012-07-26 02:29:46
【问题描述】:
将 Microsoft 特定的 _msize() 函数与 new [] 一起使用是否安全?
例子:
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 测试了代码,它看起来可以工作!但是我想知道是否有一些预期的问题或任何特殊情况?
【问题讨论】:
标签:
c++
c
visual-studio-2010
visual-c++
mfc
【解决方案1】:
当且仅当operator new[] 由malloc & Co. 实现时才会正确
【解决方案2】:
如果有人为您的类型覆盖 operator new,则可能会出现问题。
写起来很简单
const size_t s = 100;
int* i = new int[s];
或者,如果你真的写 C++
std::vector<int> i(100);
【解决方案3】:
_msize 函数返回内存块的大小(以字节为单位)
通过调用 calloc、malloc 或 realloc 分配。
所以如果operator new 是由malloc() 实现的,它就会起作用。否则,或者如果operator new 被覆盖,您将遇到麻烦。