1

可能重复:
如何找到 sizeof(指向数组的指针)

例如,当使用 malloc 声明 char 指针时。有没有办法确定分配的长度。

例如,如果我定义一个 char 数组,我可以很容易地找到元素的数量

char a[10];
a[0]='c';
cout << sizeof(a) / sizeof(a[0]);

这将产生 10. 另一方面,如果我尝试使用 char 指针

char *a;
a = (char*)malloc(10);
a[0] = 'c';
cout << sizeof(a) / sizeof(a[0]);

然后它产生 8,这显然是指针的大小,而不是分配的长度。

是否可以找到 char 指针的分配长度?

我问这个而不使用 std::string 或其他的原因是因为我在破解一些面试问题时遇到了这个问题。所以出于好奇

4

2 回答 2

6

SomeRandomGuyOnSO:

不,这不对。

我:

是的,它是,但它将是非标准的并且依赖于平台。

除此之外,让我不要重复所有关于使用标准 C++ 容器的好建议。让我真正回答你的问题。对该主题进行快速的 Google 搜索会找到执行此操作的方法。例子:

// OS X
#include <malloc/malloc.h>

char *buf = malloc(1024);
size_t howManyBytes = malloc_size(buf);
printf("Allocated %u bytes\n", (unsigned)howManyBytes);

// Linux
#include <malloc.h>

char *buf = malloc(1024);
size_t howManyBytes = malloc_usable_size(buf);
printf("Allocated %u bytes\n", (unsigned)howManyBytes);

// Windows, using CRT

char *buf = malloc(1024);
size_t howManyBytes = _msize(buf);
printf("Allocated %u bytes\n", (unsigned)howManyBytes);

所有三个片段都应该打印 1024 或更大。

于 2012-10-05T15:56:38.257 回答
2

malloc() 并不真正了解数组或其他事物,它只是为您分配一块内存。除非您自己单独跟踪,否则您无法获得该空间的大小。这就是为什么大多数作用于数组的方法都采用两个参数,数组和长度。

于 2012-10-05T15:46:17.047 回答