确定TCHAR的calloc数组的长度(不是字符串长度)

时间:2011-04-18 20:05:53

标签: c calloc

我有这段代码:

TCHAR *sRes;
sRes = (TCHAR *) calloc(16384, sizeof(TCHAR));
DWORD dwRes = sizeof(sRes);

dwRes始终为8,当然_tcslen(sRes)始终为0.

我正在寻找16384。

3 个答案:

答案 0 :(得分:3)

在C中,无法仅使用块的基址来获取内存块的大小。

但是当你创建了这个块时,你知道它的大小:只需保存它,然后在需要时使用它:

TCHAR *sRes;
DWORD dwRes = 16384 * sizeof (TCHAR);
sRes = calloc(16384, sizeof (TCHAR)); /* I prefer `sizeof *sRes` */

/* use `sRes` and `dwRes` as needed ... */

另外,请注意我从calloc的返回值中删除了强制转换。这里的施法没有任何用处,可能会隐藏错误。

答案 1 :(得分:0)

没有支持的机制来获取使用malloc或calloc分配的块的大小。如果您拨打HeapAlloc,则可以在此后致电HeapSize

答案 2 :(得分:0)

操作系统和底层内存分配器实现会跟踪该数字,但是没有标准工具可以在应用程序代码中获取此值。

sizeof是一个静态运算符,因此不能用于返回在运行时确定的任何大小。

您唯一的选择是创建一个自定义结构,您可以手动保留返回的指针和已分配的大小。