1

構造体の配列にメモリを割り当てたい。

struct str
{
    int *num;

};

creat()
{
    str s = malloc(sizeof(str));
    s->num = (int*)malloc(5*sizeof(int));
}

しかし、行の実行後s->num = (int*)malloc(5*sizeof(int));、確認しsizeof(s->num)ても同じです。

何か不足していますか?

4

3 に答える 3

1

s->numは整数へのポインタであるため、そのサイズは決して変わりません。で始まるメモリの割り当てられたブロックを別の方法で追跡する必要がありますs->num

于 2013-11-14T16:47:35.410 に答える
0

その理由s->numは、動的に作成された配列ではなく、ポインターだからです。したがって、sizeofポインターが表示されます。

動的に割り当てられた配列のサイズを見つけるには、以前のSO の回答で次のような手がかりが得られます。

  1. 5 つの整数の配列を割り当てようとしているので、さらに 1 つの整数を追加して 6 にします。
  2. 最初の整数のサイズを非表示にしptr + 1て、配列へのポインターとして返します。
  3. *(ptr - 1)これで、最初の int に隠されている でサイズを取得できます。
于 2013-11-14T17:05:46.220 に答える