Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 堆上分配的内存大小_C++_Visual C++_Heap - Fatal编程技术网

C++ 堆上分配的内存大小

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++特有的;在这种情况下,一些堆调试助手,但它们仅在项目以调试模式编译时工作;我认为还有其他

如果缓冲区包含“0”字符,是否可以检查堆上分配的内存大小

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”()/代码>前调用,然后可以尝试OxMsiz()/<代码>,但它又是不可移植的,甚至可能不可靠。

< P>不。您需要将分配的内存量存储为单独的变量,无论何时,只要你想对分配的结构做点什么,你都需要随身携带它。这很麻烦,但可能很快。作为安全舒适的替代品,请使用std::vector、boost::array等