我有这段代码:
TCHAR *sRes;
sRes = (TCHAR *) calloc(16384, sizeof(TCHAR));
DWORD dwRes = sizeof(sRes);
dwRes始终为8,当然_tcslen(sRes)始终为0.
我正在寻找16384。
答案 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
是一个静态运算符,因此不能用于返回在运行时确定的任何大小。
您唯一的选择是创建一个自定义结构,您可以手动保留返回的指针和已分配的大小。