我有这个代码:
TCHAR *sRes;
sRes = (TCHAR *) calloc(16384, sizeof(TCHAR));
DWORD dwRes = sizeof(sRes);
dwRes 始终为 8,当然 _tcslen(sRes) 始终为 0。
我正在寻找16384。
在 C 中,没有办法仅通过块的基地址来获取内存块的大小。
但是当你创建块时,你知道它的大小:只需保存它并在需要时使用它:
TCHAR *sRes;
DWORD dwRes = 16384 * sizeof (TCHAR);
sRes = calloc(16384, sizeof (TCHAR)); /* I prefer `sizeof *sRes` */
/* use `sRes` and `dwRes` as needed ... */
另外,请注意我从calloc
. 在这里投射没有任何用处,并且可能隐藏错误。
不支持获取使用 malloc 或 calloc 分配的块大小的机制。如果您HeapAlloc
改为打电话,您可以HeapSize
在之后打电话。
操作系统和底层内存分配器实现会跟踪该数字,但没有标准工具可以在应用程序代码中获取该值。
sizeof
是一个静态运算符,因此不能用于返回在运行时确定的任何内容的大小。
您唯一的选择是创建一个自定义结构,您可以在其中手动保留返回的指针和分配的大小。