0

我有这个代码:

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

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

我正在寻找16384。

4

3 回答 3

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. 在这里投射没有任何用处,并且可能隐藏错误。

于 2011-04-18T20:29:32.007 回答
0

不支持获取使用 malloc 或 calloc 分配的块大小的机制。如果您HeapAlloc改为打电话,您可以HeapSize在之后打电话。

于 2011-04-18T20:09:24.227 回答
0

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

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

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

于 2011-04-18T20:36:22.467 回答