重複の可能性:
C 配列のインスタンス化 - スタックまたはヒープの割り当て?
char ポインターを含む構造体を動的に割り当てる場合、実際の char ポインターはどうなりますか? どこに保管されていますか?
構造体が解放されると、char ポインターも一緒に解放されますか?
たとえば、次の構造体を考えてみましょう。
struct mix
{
int a;
float b;
char *s;
};
typedef struct mix mix;
そして、それにメモリを割り当てる次のコード:
int main()
{
mix *ptr = (mix*)malloc(sizeof(mix));
ptr->a = 3;
ptr->b = 4.5f;
ptr->s = "Hi, there, I'm just a really long string.";
free(ptr);
return 0;
}
スタックに割り当てられた後、 ?*s
と共に解放され*ptr
ます。動的に割り当てられていないため、実際にスタックに割り当てられていると想像できます(mallocに私が知らない機能がある場合を除く)。*s
そして、解放の時点で「範囲外」になると思い*ptr
ます。それとも、完全に間違っていますか?:)
どうもありがとう!