12/11/13 22:12:13.29
前提1:一般的なC言語(GC搭載していない)
前提2:main関数は除く
前提3:関数実行後すぐに終了するとは限らない
前提4:関数は何度も使われることがある
これがメモリリークするのは当たり前の話で、
mallocをしたらfreeするのは当たり前。
free不要論とは一体何だったのか。
天邪鬼(バカ)が言葉尻を捉えていただけではないだろうか。
まつもと ゆきひろもそのバカの一人だったらしいね。
例外中の例外を除いて、mallocをしたらfreeは必要。
これが真の答えだろう。
2:デフォルトの名無しさん
12/11/13 22:19:16.94
10年前の俺を見ているようだ
3:デフォルトの名無しさん
12/11/13 22:23:33.65
昔のアプリはサーバーなんてものは考えられておらず
アプリ(CUIしかない)は実行したらすぐに終了していたんだよ。
だからfreeしなくてもいいとかいう間違った考え方が生まれた。
4:デフォルトの名無しさん
12/11/14 07:38:29.10
exitで脱出したい時にもいちいち手間掛けてfreeすんのか、って話だとか聞いたけど。それなら
確かにfree要らんわな。
freeしても大抵マークするだけだしプロセス終了時に開放されるからfree不要、って話の方には、
基本的に賛同しないけどな。してもしなくても変わらないケースも多いが、変わるケースも少なく
ないし、freeを省略する利点も無い。実行形式をとことん小さくしたい時くらいかね。
5:デフォルトの名無しさん
12/11/14 10:17:51.41
>>1
つか、その前提条件はmalloc-free論争のときのと違うし。
6:デフォルトの名無しさん
12/11/14 12:14:18.68
>>3
基本的に終了しないアプリなんて、それこそC言語が生まれる前からあるだろ
7:デフォルトの名無しさん
12/11/14 14:35:53.85
free地獄
a = malloc(10);
if (error) {
free(a);
return;
}
b = malloc(10);
if (error) {
free(a);
free(b);
return;
}
c = malloc(10);
if (error) {
free(a);
free(b);
free(c);
return;
}
process();
free(a);
free(b);
free(c);
return;