構造体の配列にメモリを割り当てたい。
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)
ても同じです。
何か不足していますか?
構造体の配列にメモリを割り当てたい。
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)
ても同じです。
何か不足していますか?
s->num
は整数へのポインタであるため、そのサイズは決して変わりません。で始まるメモリの割り当てられたブロックを別の方法で追跡する必要がありますs->num
。
その理由s->num
は、動的に作成された配列ではなく、ポインターだからです。したがって、sizeof
ポインターが表示されます。
動的に割り当てられた配列のサイズを見つけるには、以前のSO の回答で次のような手がかりが得られます。
ptr + 1
て、配列へのポインターとして返します。*(ptr - 1)
これで、最初の int に隠されている でサイズを取得できます。