1read 100read
2013年03月プログラム148: mallocの後にfree不要と言うバカいるの?Part2 (228) TOP カテ一覧 スレ一覧 2ch元 削除依頼
スレ立てるまでもない質問はここで 125匹目 (820)
CVS導入スレ〜 Rev.3 (837)
[無料でラクラクJava帳票作成] JasperReports使い集合 (317)
C言語をやりたいんですが (261)
動的言語で大規模開発 (291)
COBOL vs Java 2戦目 (956)

mallocの後にfree不要と言うバカいるの?Part2


1 :2013/01/30 〜 最終レス :2013/02/21
fjの時代から10年以上に渡るmalloc/free問題について語ってください(^q^)
前スレ
main以外★mallocの後にfree不要と言うバカいるの?
http://toro.2ch.net/test/read.cgi/tech/1352812333/

2 :
ここまでのまとめ
・freeいる派完全勝利
・freeいらない派のくさおが発狂、レスを流すのに必死
・freeいらない派のくさおがバグ付スタックオーバフローソースを作成、
 身をもってfreeは危険だと主張
・freeいらない派のくさおが自演を開始、自画自賛を始める
・freeいらない派のくさおが自演を指摘され遁走 ←いまここ

3 :
前スレ1

1 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/13(火) 22:12:13.29
前提1:一般的なC言語(GC搭載していない)
前提2:main関数は除く
前提3:関数実行後すぐに終了するとは限らない
前提4:関数は何度も使われることがある

これがメモリリークするのは当たり前の話で、
mallocをしたらfreeするのは当たり前。
free不要論とは一体何だったのか。
天邪鬼(バカ)が言葉尻を捉えていただけではないだろうか。
まつもと ゆきひろもそのバカの一人だったらしいね。
例外中の例外を除いて、mallocをしたらfreeは必要。
これが真の答えだろう。

4 :
freeいる派の主な主張
・mtraceが通らないとか論外
・対にするようにしておかないと悪癖が身に付く
・そもそも最後にまとめて解放すること自体が論外
freeいらない派の主な主張
・freeでバグる可能性があるから解放したくない
・プロセスの終了処理に黙って解放されるほうが終了処理がはやい

5 :
なんかスレ立てたら賢者モードになっちゃったよ。
前スレで議論してたのがうそみたい。

ところで、Perl、Python、RubyなんかのP言語が猛威をふるい
Javaなんかもガベコレ積んでるし、
Windowsアプリの主要開発言語もC#になろうかとしている今、
今後、手動でメモリ確保、メモリ解放しなきゃならない環境ってのは
どういうのが残るかなぁ
AppleのObjective-C、組み込み開発、ドライバ、OS等のハードに直結した部分
数値計算とかそういう純粋に速度が要求される分野
思いついたのはこのくらいなんだけど
他にないかなぁ

6 :
Objective-Cは最近は手動じゃないっぺ。

7 :
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
                  京都大学霊長類研究所

8 :
freeする前に終了しちゃえばいいさ

9 :
「main 以外」なんだからねっ!
不毛な議論しちゃダメ、絶対。
ところで、exit 適用時も議論対象外に、入りますか?

10 :
「main以外」抜いたここは別スレだろ

11 :
こっちが本スレで向こうが隔離スレでしょ
この議論はUNIXの"悪習"が元凶のような気がしてきた

12 :
ぶっちゃけ2000年問題と同レべの手抜き習慣

13 :
俺もOS評価するときにOS再インスコが
必要になったらPCの電源をブチっと
落とすけど、そんな感じ?

14 :
使い捨てのプログラムで、コンパイラみたいな一度走って終わりのプログラムなら、
全部mallocしっぱなし、ってこともある。時と場合による。

15 :
"main以外"を抜いて、また1からやり直したいのか?>>1

16 :
>>13
どっちかというと、再インストール関係なしに「もうディスクにアクセスする必要が
ないことがわかっているから」といってrebootのかわりにリセット押すのが近いだろう。

17 :
スレチだが、
sprintf(buf,…);
len=strlen(buf);
という低脳なコードを久しぶりに見たw

18 :
946 :デフォルトの名無しさん:2013/01/29(火) 22:41:57.29
そもそも最後にまとめて解放すればいいという設計がおかしいんだよ。
最後にまとめて解放するくらいならプロセスの終了に任せれば、って
話になるのはそのため。
mtraceの話も出てるけど、リストだろうがツリーだろうが、使っていると
認識している箇所だけを正しく解放していって、最後に何が残るかを
見ないとリークしてるかどうかなんてわからないだろ。
最後にツリーまとめて消してみたら全部消えたのでリークしてません、
なんてことにはならないんだから。
そこに解放したつもりになっているデータが連結されているかどうか
というのが重要なのに。
947 :デフォルトの名無しさん:2013/01/29(火) 22:45:04.83
こりゃまた大きな釣り針だな。www
948 :デフォルトの名無しさん:2013/01/29(火) 22:47:30.66
くさお悔しくて絶好調だな
949 :デフォルトの名無しさん:2013/01/29(火) 22:47:59.75
>>946
まとめて消して消えるならリークしてないだろ。バカか。

19 :
>>17
それやったことあります。汚物見せてごめんなさい。

20 :
>>17
そういうコードが必要な場合もある。
どういう場合かは、あんたには分からんだろうがね。

21 :
100%ありません

22 :
>>21
1行目と2行目でbufの内容が変わることは100%あり得ない
と思ってんだろ?素人君

23 :
>>22
はい。100%あり得ません。
bufが共有であるならセマフォなり何らかの排他をしないのは単なるバグです。

24 :
>>17
俺も数えるのめんどくさくてやってしまいそうだが。正解は?

25 :
>>23
あれを見た瞬間にその「単なるバグ」の可能性にまで気づくかどうかの問題
後出しでは意味なし

26 :
>>25
>そういうコードが必要な場合もある。
じゃあ後出しでない回答を期待します。
逃げたければ逃げてもいいですよ。

27 :
>>26
もう答えはでている
あんたが理解できていないだけだ

28 :
>>24
len = sprintf(buf,…);

29 :
「低脳」
草生やし
卑屈で低レベルな煽り
…まともに相手する必要を認めず。

30 :
>>29
敗北宣言ありがとうございますw

31 :
議論を勝ち負けで考えているかぎり
お前らの勝ちは一生ありえないよ。

32 :
>>22
そもそも2行目が不要なことを理解できない低脳君乙。

33 :
> スレチだが、と言って、脈絡もなく>>17を投下したのはこのスレの
異常に高いバカ召喚性能を使いたかったからだろ。wwww
釣られたバカが>>22 wwww

34 :
いつもの草男がだんだん本性を現してきました

35 :
つられたバカが悔しがってるな。 wwww
なんでバカって簡単につられるんだろう。 あっ、バカだからか。wwww

36 :
>>22がバカだからくさおだろう

37 :
>>22が書きそうなコード
if(p!=NULL)free(p);

38 :
>>37
> if(p!=NULL)free(p);
それも、いま知るまでやっていました…

39 :
>>38
基地外スレであんまり真面目ぶると、逆に工作員認定される

40 :
sprintfは使用禁止。バカしか使わない。wwww
釣られた>>22 バカすぎ wwww
> From: [22] デフォルトの名無しさん <sage>
> Date: 2013/02/03(日) 06:45:51.40
>
> >>21
> 1行目と2行目でbufの内容が変わることは100%あり得ない
>
> と思ってんだろ?素人君

41 :
↑くさお書き込みテンプレ

42 :
>>38
freeにNULLを与えた時の動作が標準化されたのはC89からだったはずだから、
20年くらい前のソースならそのように書かれていても不思議じゃない。
作ったライブラリが予想もしない所で使われるかもしれないから、
freeしろとかほざいているfreeバカは、NULL与えるとSEGVする環境(SystemV)に
持って行かれるかもしれないからチェックしろとか言わないのか? wwww

43 :
終了時にメモリ解放してくれるのはどのC言語の規格書に書いてるの?

44 :
>freeにNULLを与えた時の動作が標準化されたのはC89からだったはずだから、
馬鹿R
K&R1 からだ
realloc(NULL, size); がmalloc(size) と等価にならないかわいそうなバグがある処理系が存在した話であればこれは有名

45 :
>>37
コンパイラが最適化してくれるので問題ありません。

46 :
>>45
しない
コンパイラからはfree() は単なる一つの関数にしかみえない
p が 0 のとき free(p) はなにもしないことは、コンパイラはしらない
勉強不足だ、これではwww野郎やQZすらの相手にもならない
R

47 :
>>46
素人乙

48 :
>>46
コンパイラがライブラリの仕様を把握していないと矛盾が生じます。
printfが書式文字列に従って値を表示することをしらなければ出せない
はずの、書式文字列と引数があっていないときのwarningを出せます。
同じように、if(!p)free(p)という悪しき慣例があることも知っています。

49 :
>>47
ではfree(0)を省いてくれる処理系を挙げてみよ
できないのなら市ね

50 :
>>48
>書式文字列と引数があっていないときのwarningを出せます。
ほう、それはgccだねこれは一本とられた。よく頑張ったね。

51 :
>>49
なんでfreeのほうを省くの?バカなの?死ぬの?

52 :
>>50
×それはgccだね
○俺はgccしか知らない

53 :
本日の大バカ晒しage

49 :デフォルトの名無しさん:2013/02/03(日) 13:47:08.31
>>47
ではfree(0)を省いてくれる処理系を挙げてみよ
49 :デフォルトの名無しさん:2013/02/03(日) 13:47:08.31
>>47
ではfree(0)を省いてくれる処理系を挙げてみよ
49 :デフォルトの名無しさん:2013/02/03(日) 13:47:08.31
>>47
ではfree(0)を省いてくれる処理系を挙げてみよ
49 :デフォルトの名無しさん:2013/02/03(日) 13:47:08.31
>>47
ではfree(0)を省いてくれる処理系を挙げてみよ

54 :
>>51
const char *p = NULL;
free(p);
だったら最適化でfree(p)を消してくれるかもねw

55 :
逆に、mallocがNULLを返したかチェックしない人多いよね。
LinuxではNULLが返ってくることはないというのが理由らしいんだけど。

56 :
成功した振りして使用時に落ちるの何とかして欲しい

57 :
OOM Killerで他のプロセスが殺されるとか、糞仕様すぎる。

58 :
>>44
> 馬鹿R
> K&R1 からだ
古い規格に詳しいな、ジジイ。 で、それが何か? wwww

59 :
反論できなくなると開き直る

60 :
>>46
お前がオレさまの相手をするのは、バカすぎて無理。wwwww
うんこQzからかって遊ぶだけにとどめておけ。wwww
その処理系のライブラリが
inline void free(void *p)
{
if (p)
read_free(p);
}
という実装だったら、
> if(p!=NULL)free(p);
はコンパイラが最適化できる。 wwww

61 :
>>59
> realloc(NULL, size); がmalloc(size) と等価にならないかわいそうなバグがある処理系が存在した話であればこれは有名
「これは有名」の「これ」とは何かね? wwww
バカの文章は読みにくい。 wwww

62 :
>>45
コンパイラが最適化してくれるというのは、そうかも知れない。
でも、しないかもしれない。
また、それは可読性を下げてまでやるべき事ではないと思うがな。
もしかして IOCCC に出品するつもりとか?
そして、やり方としては、無茶な仕事を下請けへ丸投げするのと
全く同じなんだよね。
技術的な裏付けは何にも無いけど、彼奴等に投げておけば
何とかするだろう、レベルの発想。

63 :
>>62
えっと、if文1個式1つで可読性が悪くなるとか、
頭悪いんですか?悪いんですね。

64 :
>>55
そうなのか?少なくともヒープとして使えるメモリ空間使い果たせば返ってくるだろ。
>>56,57
vm.overcommit_memory あたりでググってみるといいかも。
ただでっかいメモリ空間を使っているプロセスから fork & exec していたりする時は注意。

65 :
それは↓を言う前に言うべきだったね。 wwww
自信たっぷりに否定した後で、可能な事を示されてからじゃ遅い。 wwww
お前はヘボなんだよ。wwww ヘボ同士でうんこQzと絡んでるのがお似合い。wwww
本日のバカ wwww
> From: [46] デフォルトの名無しさん <sage>
> Date: 2013/02/03(日) 13:37:59.35
>
> >>45
> しない
> コンパイラからはfree() は単なる一つの関数にしかみえない
> p が 0 のとき free(p) はなにもしないことは、コンパイラはしらない
> 勉強不足だ、これではwww野郎やQZすらの相手にもならない
>
> R
>>45は前スレのオレの真似をして煽っただけだろう。
十中八九inlineで最適化なんて思いついていない中防。。
そんなのに釣られてバカ晒す事になった>>46が憐れでならない。 wwwww

66 :
全ては、その1個の積み重ねなのだよ。

67 :
>>62
呼ばなくていいなら関数呼び出しは少ないほうがいい場合もある。
そういう意味でif (p) free(p)は、意味はある。
機械語にしたところでfreeを呼ぶためにレジスタにロードするので
zeroチェックはそのついでで行うことができるし、ifのほうは
大したペナルティにはならない。

68 :
freeがinlineになっているクソな処理系ってなんだよ。

69 :
>>64
linux上でman mallocをよく読め。

70 :
>>67
NULLがzeroだなんて誰が決めたの?

71 :
ところで明日振り替え休日で休みだよね。

72 :
NULLは(仮に機械表現が全ビット0でなかったりしても)コンパイラ(言語)の上では0だよ?
そんなことも知らずにこんなスレで暴れようと思ってるの?

73 :
>>60
>その処理系のライブラリが inline void free(void *p)
お前も馬鹿か?
標準ライブラリがソースで提供されているとでも?
普通はobjやlibではないか?
そんなバイナリをインラインにできるとでも?
R

74 :
>>73
#include <stdlib.h>

75 :
>>61
やさしい日本語しかよまない/よめない馬鹿なんだね、指示詞を敢えて差し込むのはよくやること
>前項の目的を達するため、陸海空軍その他の戦力は**これを**保持しない。
>国の交戦権は**これを**認めない。
>> realloc(NULL, size); がmalloc(size) と等価にならないかわいそうなバグがある処理系が存在した話であればこれは有名
>「これは有名」の「これ」とは何かね? wwww
「realloc(NULL, size); がmalloc(size) と等価にならないかわいそうなバグがある処理系が存在した話」
だね
R

76 :
>>74
R

77 :
>>71
ということにしたいのですね:-P

78 :
len = sprintf(buf, "%c", 0)
len => 1
strlen(buf) => 0

79 :
>>75
で、それが、
「freeにNULLを与えた時の動作が規定されたのはC89ではなくてK&R1だ」となんの関係があるんだ? wwww

80 :
しかしこのネタは昔から盛り上がるんだけれど、リアルで素のmallocをアプリレベルでそんなに呼ぶものなのか?
組み込み云々言っている奴もいたけれど、俺が関わってきた範囲では分断の問題で直接使うことはないな。
素のmalloc/freeは遅くて使い物にならないって環境って場合もあったけど。
最近はRAM自体はそこそこのっている環境も多いんでスタック増やして、C99にして可変長配列使うっていう手で
かなりの部分が楽になった。
人命云々言っている奴、プロセスの概念がある世界ならば、なるべくプロセスの寿命を短くするって方向も
考えたほうがいいぞ。最初からmalloc/freeだけに限らずバグの全くない大規模なプログラムなんて
妄想だと思ってシステム作ると、頑強なものができるから。

81 :
マルチスレッドだと、スタックサイズが固定になるのでautoにでかいのを置くことは
必然的に避ける事になる。 これ位は常識だぞ。 wwww
> 最初からmalloc/freeだけに限らずバグの全くない大規模なプログラムなんて
free楽勝と豪語しているfree必須バカは全くバグのないプログラムを作れるらしいぞ。wwww

82 :
>>69
>>65のどの部分がおかしいか教えてくれ。マジでわからん。
vm.overcommit_memory=2 でも malloc が成功しても実際には使えないことがあるってことか?

83 :
>マルチスレッドだと、スタックサイズが固定になる
無知発見w

84 :
>リアルで素のmallocをアプリレベルでそんなに呼ぶものなのか
>素のmalloc/freeは遅くて使い物にならないって環境って場合もあったけど
自分が特殊な環境にいたと自負してる時点で1行目が死んでるよ

85 :
>>82
はい。
Linuxの楽観的メモリ管理はその程度ではどうにもなりません。

86 :
>>83
あっそ、pthreadでもWin32でもスレッド生成時のスタックサイズを超える事は出来ないけど、
それを伸ばしてくれるスレッドライブラリってどれだよ。www

87 :
>>82
いや、常識的にユーザーにその設定書き換えてくださいとは言えないだろ…
root権限ないとだめだし自分のプログラムだけに影響するわけでもないし

88 :
>>81
> マルチスレッドだと、スタックサイズが固定になるのでautoにでかいのを置くことは
> 必然的に避ける事になる。 これ位は常識だぞ。 wwww
おいおい、組み込みの世界だと元々スタック1Kとかふつーだったのが、それを64Kにすれば
楽できるとかそういうレベルの話だよ。

89 :
>>86
>スレッド生成時のスタックサイズを超える事は出来ない
生成時には可変であることを認めましたね?おバカさんw

90 :
Rの人は息してる?w

91 :
>>79
関係ないね。この超有名な話と混同しているのではないかと勘繰っただけでね
R

92 :
>>80
確かに素のmalloc()/free() を直にソースに散らばらせるのは好ましくないね
QZですらアロケータ経由だったようだし
昔のlisp処理系ではタイプごとにアロケータを別に準備していたようだねセル用とかね64KiBのシステム用だったけれど

93 :
>>55
32ビットだとメモリ空間は4Gだろ。32ビットlinuxでmalloc(1M)を繰り返すと、
4097回目には何が返ってくる?
ああ、返さずに自殺という選択肢もあるか。

94 :
>>81
>free楽勝と豪語しているfree必須バカは全くバグのないプログラムを作れるらしいぞ。wwww
楽勝とはいっていないがmalloc()/free()くらいは完全に管理できるだろうねアロケータを準備したりしてね
お前はそれができないからmalloc()/free()を使わないんだろう?
R

95 :
>>86
スレッド生成時には好きに変えられるんだ馬鹿
R

96 :
(このままじゃくさおが生霊に殺されそう…)

97 :
>>90
憲法すら読んだことがないとはねえ
中卒?

98 :
>>89
CreateThreadは引数でスタックサイズ与えるんだから自明の事。www
pthreadしか知らないバカか。 wwwww

99 :
>>98
自明なのに「マルチスレッドだと、スタックサイズが固定になる」
って言いきった人がいるらしいですよw
生成時にいくらでも変えられるのにどのへんが固定なんでしょうねw

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
プログラム関係の雑誌について (223)
delphiで作った有名ソフトって何があるの? (680)
CVS導入スレ〜 Rev.3 (837)
sizeof(char)が必ず1でも、省略すべきではない (586)
今まで見た中で一番すげーコメント (575)
★★Java質問・相談スレッド160★★ (529)
--log9.info------------------
オシャレ魔女ラブandベリー 第18ステージ (916)
仮面ライダーバトル ガンバライドトレードスレ4 (884)
ガンダムカードビルダー0083 今日の戦場スレ24 (477)
【LOV】LORD of VERMILIONのキャラはエロカワイイ16 (333)
アーケードエミュ総合スレ49 (940)
【QMA】フェニックス組⇔ミノタウロス組スレ14 (394)
【ニコニコ動画】QMAのプレイ動画10 (223)
【ボーダーブレイク】コアニートを晒すスレ (493)
【LoV】LORD of VERMILIONトレード診断・雑談スレ14 (411)
ウイニングイレブン2008AC くぎゅうううう狩りスレ (855)
三国志大戦 女性武将単で司空を目指すスレ★8 (847)
三国志大戦の旧C文聘強いゾイwwww【2将目】 (685)
【三国志】トレード・詐欺対策本部 13【WCCF】 (349)
【誰か】戦場の絆野良スレ13匹目【助けてー】 (202)
【LoV】LORD of VERMILION Re:2 不死スレ41 (233)
QMA黙示録カイジ (394)
--log55.com------------------
第一復建ってどうよ?
建築しりとり
※解体工事施工技士試験※
【ミッション4】建築士なしで独立する方法
&#9608;教育的ウラ指導スレ&#9608;
原子炉冷却作戦@建築板
自民党】笹子トンネル崩落はマスコミのせい【民主党
日建スレ35