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 に答える