我在找一个东西,它能给我str字符指针所占的大小,我想证明给我的内存是100字节,有谁知道这个方法吗?
int main()
{
char * str = (char *) malloc(sizeof(char) * 100);
int size = 0;
size = /* library function or anything use to find size */
printf("Total size of str array - %d\n", size);
}
我想证明给我的内存是100字节,有人知道吗?
一个原始指针只知道它指向它的类型中的一个元素。如果它指向的那个东西恰好是一个数组的一部分,指针就不知道,也没有办法从它那里得到这些信息。
你想使用的类型是 做 知道他们的大小,比如说。std::string
, std::array
或 std::vector
.
C和C++标准并没有提供一种方法来从一个地址中获取在调用到 malloc
返回该地址。
一些C或C++的实现提供了一种方法来获取在给定地址处提供的内存量,如 malloc_size
. 提供的数量可能会大于请求的数量。
如果内存中包含一个字符串,这是一个以空字符结束的字符数组,那么你可以通过计算直到空字符的字符来确定字符串的长度。这个函数是由标准的 strlen
函数。这个长度与分配的空间是不同的,除非,字符串恰好填满了这个空间。
没有(好的、标准的、可移植的)方法可以单单从一个指针值来判断它是否是数组的第一个元素,也没有办法判断它后面有多少元素。 这些信息必须单独跟踪。
如果你是用C++写的,如果可以的话,不要自己做内存管理。使用一个标准的容器类型,比如 std::vector
或 std::map
(或 std::string
为文本)。) 如果你 必须 做自己的内存管理,使用 new
和 delete
运算符而不是 *alloc
和 free
库函数,并围绕这些操作封装一个类,该类还跟踪有多少元素被分配(这一点,就像 std::vector
和 std::map
,是通过一个只读的 size()
方法)。)