下の階層の領域は開放しなくて大丈夫?

[戻る]
matu 2001/08/27(月) 21:22:29
 下記のソースで free(st) の前に free(st->p1) は
必要ですか?もし、必要なら理由はなぜですか?
単純に領域確保したところは個々に開放しなくてはならないから
なのでしょうか?
 アドバイスをお願いします。
 

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct st{
    char*    p1;
    int    a;
} ST;

void main()
{
    ST*    st;

    st = (ST*)malloc(sizeof(ST));
    st->p1 = (char*)malloc(2*sizeof(char));

    *(st->p1) = 2;
    *(st->p1+1) = 3;

    free(st);
}

Bun 2001/08/28(火) 07:50:27
> 下記のソースで free(st) の前に free(st->p1) は
>必要ですか?もし、必要なら理由はなぜですか?
必要だと思います。
free(st)でp1(ポインタ)は解放されますが、ポインタの指した場所から
確保された領域は開放されないでしょう。

>単純に領域確保したところは個々に開放しなくてはならないから
>なのでしょうか?
私はむずかしいことは解りませんが、1対1で考えればトラブルも
少ないのではないでしょうか。

matu 2001/08/28(火) 19:09:00
[[解決]]
 普通に考えたらやっぱり開放したほうがいいですよね。
安全のためにもちゃんと開放していきます。

 ありがとうございました。

古いスレッドには追加発言できません。