C++ 堆上分配的内存大小
如果缓冲区包含“0”字符,是否可以检查堆上分配的内存大小C++ 堆上分配的内存大小,c++,visual-c++,heap,C++,Visual C++,Heap,如果缓冲区包含“0”字符,是否可以检查堆上分配的内存大小 char *c = new char[6]; //random size memory memset(c, 0, 6); 不,一般来说你不能。您必须单独存储此信息 如果需要将该内存用作字符串或数组,我的建议是使用std::string或std::vector,它们自己完成所有这些簿记工作 1.i、 e.“就标准而言” 我知道你的问题是MSVC++特有的;在这种情况下,一些堆调试助手,但它们仅在项目以调试模式编译时工作;我认为还有其他
char *c = new char[6]; //random size memory
memset(c, 0, 6);
不,一般来说你不能。您必须单独存储此信息
如果需要将该内存用作字符串或数组,我的建议是使用std::string
或std::vector
,它们自己完成所有这些簿记工作
1.i、 e.“就标准而言”
我知道你的问题是MSVC++特有的;在这种情况下,一些堆调试助手,但它们仅在项目以调试模式编译时工作;我认为还有其他特定于编译器的函数可以获得分配的大小,但如果使用自定义分配器,它将无法工作 另一方面,像这样的API让您知道分配的内存块有多大(参见示例)
但是,我再次认为,自己跟踪这些信息是一种更干净的设计。没有可靠的方法可以做到这一点-你必须自己存储这些信息
operator new[]()
函数可以以任何方式实现(并由您替换),因此除非您详细了解确切的实现,否则您无法知道大小
在VisualC++中,内置类型的默认实现是只向“代码”>“MARROCK”()/代码>前调用,然后可以尝试