-2

重複の可能性:
cで動的に割り当てられたメモリのサイズを決定する

structのCコードにはaがありますが、この質問は他のすべてのタイプにも当てはまるため、作成したintのではなく使用structします.

int *a = realloc(NULL, 10*sizeof(int) );
printf("%d\n",sizeof(a)); //prints 4, needed to be 40

int b[10];
printf("%d\n",sizeof(b)); //prints 40

私の質問は次のとおりですrealloc。コードで使用していますが、配列の合計サイズを見つける方法がわかりません。それを行う最も簡単な方法は何ですか?ありがとうございました。

4

4 に答える 4

1

コンパイル時に評価されることを忘れないでくださいsizeof(VLAを除くが、あなたのケースではありません)。ユーザーの入力として引数のサイズを取得すると想像してくださいrealloc。コンパイラーが実際に割り当てられたサイズを知ることは不可能です。したがって、ポインターのサイズを返します。

于 2012-07-23T10:14:48.367 に答える
0

つまり、コードに格納し、さまざまな関数に渡す必要があるものです。その情報を渡したので、reallocすでに利用可能です。

また、 sizeof はポインターでは機能しないことに注意してください。ポインターが指すメモリのサイズではなく、ポインターのサイズのみを返します。

于 2012-07-23T10:16:32.360 に答える
0

http://en.wikipedia.org/wiki/Sizeofから

In the programming languages C and C++, the unary operator sizeof
is used to calculate the size of any datatype, measured in the
number of bytes required to represent the type.

つまり、これは

sizeof( int* )

アーキテクチャ上のポインタのサイズを返します。配列のサイズを知りたい場合は、次のことを行う必要があります。

sizeof( your_type ) * array_size
于 2012-07-23T10:17:26.493 に答える
0

sizeof(a)ポインターが指しているサイズではなく、ポインターのサイズを返します。mallocまたはでメモリを割り当てる場合は、自分で追跡する必要がありますrealloc

于 2012-07-23T10:23:02.293 に答える