私はこのコードを持っています:
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
は静的演算子であるため、実行時に決定されるサイズを返すために使用することはできません。
唯一のオプションは、返されたポインターと割り当てられたサイズの両方を手動で保持するカスタム構造体を作成することです。