如果缓冲区包含'0'字符,您可以检查堆中分配的大小内存吗?在堆上分配的内存大小
char *c = new char[6]; //random size memory
memset(c, 0, 6);
如果缓冲区包含'0'字符,您可以检查堆中分配的大小内存吗?在堆上分配的内存大小
char *c = new char[6]; //random size memory
memset(c, 0, 6);
没有可靠的方法来做到这一点 - 你必须亲自存储这些信息。
operator new[]()
函数可以以任何方式实现(并由您替换),因此您只是无法知道大小,除非您知道具体的实现细节。
在Visual C++中,内置类型的默认实现只是将调用转接到malloc()
- 然后您可以尝试_msize()
,但它又是不可移植的,甚至可能不可靠。
没有,一般你不能。你必须单独存储这些信息。
如果您需要将该内存用作字符串或数组,我的建议是使用std::string
或std::vector
,它们自己完成所有簿记工作。
另一方面,像LocalAlloc
这样的API会告诉您分配的内存块有多大(请参阅例如LocalSize
)。
但我认为这是一个更清洁的设计,可以让您自己跟踪这些信息。
不需要。您需要将分配的内存量存储为一个单独的变量,并且您需要随身携带,只要您想对分配的结构执行某些操作。这很麻烦,但可能会很快。作为一个安全和舒适的替代使用std :: vector,boost :: array等。
哪个编译器? – sharptooth 2011-02-14 11:06:51