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

■ このスレッドは過去ログ倉庫に格納されています
2013/01/30(水) 21:38:37.44
fjの時代から10年以上に渡るmalloc/free問題について語ってください(^q^)

前スレ
main以外★mallocの後にfree不要と言うバカいるの?
http://toro.2ch.net/test/read.cgi/tech/1352812333/
2013/02/03(日) 08:49:45.14
>>29
敗北宣言ありがとうございますw
2013/02/03(日) 08:52:06.97
議論を勝ち負けで考えているかぎり
お前らの勝ちは一生ありえないよ。
2013/02/03(日) 09:47:06.42
>>22
そもそも2行目が不要なことを理解できない低脳君乙。
33デフォルトの名無しさん
垢版 |
2013/02/03(日) 10:01:05.79
> スレチだが、と言って、脈絡もなく>>17を投下したのはこのスレの
異常に高いバカ召喚性能を使いたかったからだろ。wwww
釣られたバカが>>22 wwww
2013/02/03(日) 10:16:26.71
いつもの草男がだんだん本性を現してきました
35デフォルトの名無しさん
垢版 |
2013/02/03(日) 10:36:32.83
つられたバカが悔しがってるな。 wwww
なんでバカって簡単につられるんだろう。 あっ、バカだからか。wwww
2013/02/03(日) 10:42:10.53
>>22がバカだからくさおだろう
37デフォルトの名無しさん
垢版 |
2013/02/03(日) 10:55:25.21
>>22が書きそうなコード
if(p!=NULL)free(p);
3819
垢版 |
2013/02/03(日) 11:20:12.04
>>37
> if(p!=NULL)free(p);

それも、いま知るまでやっていました…
2013/02/03(日) 11:41:14.21
>>38
基地外スレであんまり真面目ぶると、逆に工作員認定される
40デフォルトの名無しさん
垢版 |
2013/02/03(日) 11:51:22.60
sprintfは使用禁止。バカしか使わない。wwww
釣られた>>22 バカすぎ wwww

> From: [22] デフォルトの名無しさん <sage>
> Date: 2013/02/03(日) 06:45:51.40
>
> >>21
> 1行目と2行目でbufの内容が変わることは100%あり得ない
>
> と思ってんだろ?素人君
41デフォルトの名無しさん
垢版 |
2013/02/03(日) 12:03:02.08
↑くさお書き込みテンプレ
42デフォルトの名無しさん
垢版 |
2013/02/03(日) 12:04:11.64
>>38
freeにNULLを与えた時の動作が標準化されたのはC89からだったはずだから、
20年くらい前のソースならそのように書かれていても不思議じゃない。

作ったライブラリが予想もしない所で使われるかもしれないから、
freeしろとかほざいているfreeバカは、NULL与えるとSEGVする環境(SystemV)に
持って行かれるかもしれないからチェックしろとか言わないのか? wwww
2013/02/03(日) 12:23:57.18
終了時にメモリ解放してくれるのはどのC言語の規格書に書いてるの?
2013/02/03(日) 12:24:37.29
>freeにNULLを与えた時の動作が標準化されたのはC89からだったはずだから、
馬鹿死ね
K&R1 からだ

realloc(NULL, size); がmalloc(size) と等価にならないかわいそうなバグがある処理系が存在した話であればこれは有名
2013/02/03(日) 12:42:04.81
>>37
コンパイラが最適化してくれるので問題ありません。
2013/02/03(日) 13:37:59.35
>>45
しない
コンパイラからはfree() は単なる一つの関数にしかみえない
p が 0 のとき free(p) はなにもしないことは、コンパイラはしらない
勉強不足だ、これではwww野郎やQZすらの相手にもならない

死ね
2013/02/03(日) 13:42:43.89
>>46
素人乙
2013/02/03(日) 13:46:41.46
>>46
コンパイラがライブラリの仕様を把握していないと矛盾が生じます。
printfが書式文字列に従って値を表示することをしらなければ出せない
はずの、書式文字列と引数があっていないときのwarningを出せます。
同じように、if(!p)free(p)という悪しき慣例があることも知っています。
2013/02/03(日) 13:47:08.31
>>47
ではfree(0)を省いてくれる処理系を挙げてみよ

できないのなら市ね
2013/02/03(日) 13:48:21.26
>>48
>書式文字列と引数があっていないときのwarningを出せます。
ほう、それはgccだねこれは一本とられた。よく頑張ったね。
2013/02/03(日) 13:50:06.53
>>49
なんでfreeのほうを省くの?バカなの?死ぬの?
2013/02/03(日) 13:51:19.74
>>50
×それはgccだね
○俺はgccしか知らない
53デフォルトの名無しさん
垢版 |
2013/02/03(日) 13:53:28.26
本日の大バカ晒し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デフォルトの名無しさん
垢版 |
2013/02/03(日) 13:59:20.99
>>51
const char *p = NULL;
free(p);

だったら最適化でfree(p)を消してくれるかもねw
2013/02/03(日) 14:03:19.10
逆に、mallocがNULLを返したかチェックしない人多いよね。
LinuxではNULLが返ってくることはないというのが理由らしいんだけど。
2013/02/03(日) 14:07:34.43
成功した振りして使用時に落ちるの何とかして欲しい
2013/02/03(日) 14:11:47.93
OOM Killerで他のプロセスが殺されるとか、糞仕様すぎる。
58デフォルトの名無しさん
垢版 |
2013/02/03(日) 14:23:36.91
>>44
> 馬鹿死ね
> K&R1 からだ
古い規格に詳しいな、ジジイ。 で、それが何か? wwww
2013/02/03(日) 14:29:16.84
反論できなくなると開き直る
60デフォルトの名無しさん
垢版 |
2013/02/03(日) 14:35:03.61
>>46
お前がオレさまの相手をするのは、バカすぎて無理。wwwww
うんこQzからかって遊ぶだけにとどめておけ。wwww

その処理系のライブラリが
inline void free(void *p)
{
if (p)
read_free(p);
}

という実装だったら、
> if(p!=NULL)free(p);
はコンパイラが最適化できる。 wwww
61デフォルトの名無しさん
垢版 |
2013/02/03(日) 14:44:15.39
>>59
> realloc(NULL, size); がmalloc(size) と等価にならないかわいそうなバグがある処理系が存在した話であればこれは有名
「これは有名」の「これ」とは何かね? wwww
バカの文章は読みにくい。 wwww
2013/02/03(日) 14:50:20.19
>>45
コンパイラが最適化してくれるというのは、そうかも知れない。
でも、しないかもしれない。
また、それは可読性を下げてまでやるべき事ではないと思うがな。
もしかして IOCCC に出品するつもりとか?

そして、やり方としては、無茶な仕事を下請けへ丸投げするのと
全く同じなんだよね。

技術的な裏付けは何にも無いけど、彼奴等に投げておけば
何とかするだろう、レベルの発想。
2013/02/03(日) 15:10:49.37
>>62
えっと、if文1個式1つで可読性が悪くなるとか、
頭悪いんですか?悪いんですね。
2013/02/03(日) 15:16:54.70
>>55
そうなのか?少なくともヒープとして使えるメモリ空間使い果たせば返ってくるだろ。
>>56,57
vm.overcommit_memory あたりでググってみるといいかも。
ただでっかいメモリ空間を使っているプロセスから fork & exec していたりする時は注意。
65デフォルトの名無しさん
垢版 |
2013/02/03(日) 15:20:11.25
それは↓を言う前に言うべきだったね。 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すらの相手にもならない
>
> 死ね

>>45は前スレのオレの真似をして煽っただけだろう。
十中八九inlineで最適化なんて思いついていない中防。。
そんなのに釣られてバカ晒す事になった>>46が憐れでならない。 wwwww
2013/02/03(日) 15:21:08.32
全ては、その1個の積み重ねなのだよ。
2013/02/03(日) 15:22:16.73
>>62
呼ばなくていいなら関数呼び出しは少ないほうがいい場合もある。
そういう意味でif (p) free(p)は、意味はある。
機械語にしたところでfreeを呼ぶためにレジスタにロードするので
zeroチェックはそのついでで行うことができるし、ifのほうは
大したペナルティにはならない。
2013/02/03(日) 15:26:10.39
freeがinlineになっているクソな処理系ってなんだよ。
2013/02/03(日) 15:28:33.30
>>64
linux上でman mallocをよく読め。
2013/02/03(日) 15:32:20.46
>>67
NULLがzeroだなんて誰が決めたの?
2013/02/03(日) 15:36:01.30
ところで明日振り替え休日で休みだよね。
2013/02/03(日) 15:36:42.91
NULLは(仮に機械表現が全ビット0でなかったりしても)コンパイラ(言語)の上では0だよ?
そんなことも知らずにこんなスレで暴れようと思ってるの?
2013/02/03(日) 15:44:50.31
>>60
>その処理系のライブラリが inline void free(void *p)
お前も馬鹿か?
標準ライブラリがソースで提供されているとでも?
普通はobjやlibではないか?
そんなバイナリをインラインにできるとでも?

死ね
2013/02/03(日) 15:46:58.24
>>73
#include <stdlib.h>
2013/02/03(日) 15:49:07.30
>>61
やさしい日本語しかよまない/よめない馬鹿なんだね、指示詞を敢えて差し込むのはよくやること
>前項の目的を達するため、陸海空軍その他の戦力は**これを**保持しない。
>国の交戦権は**これを**認めない。

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

死ね
2013/02/03(日) 15:50:47.38
>>74
死ね
2013/02/03(日) 15:52:02.57
>>71
ということにしたいのですね:-P
2013/02/03(日) 15:54:38.10
len = sprintf(buf, "%c", 0)
len => 1
strlen(buf) => 0
79デフォルトの名無しさん
垢版 |
2013/02/03(日) 15:56:25.84
>>75
で、それが、
「freeにNULLを与えた時の動作が規定されたのはC89ではなくてK&R1だ」となんの関係があるんだ? wwww
2013/02/03(日) 15:59:48.45
しかしこのネタは昔から盛り上がるんだけれど、リアルで素のmallocをアプリレベルでそんなに呼ぶものなのか?

組み込み云々言っている奴もいたけれど、俺が関わってきた範囲では分断の問題で直接使うことはないな。
素のmalloc/freeは遅くて使い物にならないって環境って場合もあったけど。
最近はRAM自体はそこそこのっている環境も多いんでスタック増やして、C99にして可変長配列使うっていう手で
かなりの部分が楽になった。

人命云々言っている奴、プロセスの概念がある世界ならば、なるべくプロセスの寿命を短くするって方向も
考えたほうがいいぞ。最初からmalloc/freeだけに限らずバグの全くない大規模なプログラムなんて
妄想だと思ってシステム作ると、頑強なものができるから。
81デフォルトの名無しさん
垢版 |
2013/02/03(日) 16:09:57.63
マルチスレッドだと、スタックサイズが固定になるのでautoにでかいのを置くことは
必然的に避ける事になる。 これ位は常識だぞ。 wwww

> 最初からmalloc/freeだけに限らずバグの全くない大規模なプログラムなんて
free楽勝と豪語しているfree必須バカは全くバグのないプログラムを作れるらしいぞ。wwww
2013/02/03(日) 16:14:07.11
>>69
>>65のどの部分がおかしいか教えてくれ。マジでわからん。
vm.overcommit_memory=2 でも malloc が成功しても実際には使えないことがあるってことか?
2013/02/03(日) 16:14:49.26
>マルチスレッドだと、スタックサイズが固定になる

無知発見w
2013/02/03(日) 16:15:58.26
>リアルで素のmallocをアプリレベルでそんなに呼ぶものなのか
>素のmalloc/freeは遅くて使い物にならないって環境って場合もあったけど

自分が特殊な環境にいたと自負してる時点で1行目が死んでるよ
2013/02/03(日) 16:18:17.34
>>82
はい。
Linuxの楽観的メモリ管理はその程度ではどうにもなりません。
86デフォルトの名無しさん
垢版 |
2013/02/03(日) 16:20:58.63
>>83
あっそ、pthreadでもWin32でもスレッド生成時のスタックサイズを超える事は出来ないけど、
それを伸ばしてくれるスレッドライブラリってどれだよ。www
2013/02/03(日) 16:22:02.44
>>82
いや、常識的にユーザーにその設定書き換えてくださいとは言えないだろ…
root権限ないとだめだし自分のプログラムだけに影響するわけでもないし
2013/02/03(日) 16:22:30.71
>>81
> マルチスレッドだと、スタックサイズが固定になるのでautoにでかいのを置くことは
> 必然的に避ける事になる。 これ位は常識だぞ。 wwww

おいおい、組み込みの世界だと元々スタック1Kとかふつーだったのが、それを64Kにすれば
楽できるとかそういうレベルの話だよ。
2013/02/03(日) 16:23:37.58
>>86
>スレッド生成時のスタックサイズを超える事は出来ない

生成時には可変であることを認めましたね?おバカさんw
2013/02/03(日) 16:25:47.94
死ねの人は息してる?w
2013/02/03(日) 16:27:24.50
>>79
関係ないね。この超有名な話と混同しているのではないかと勘繰っただけでね
死ね
2013/02/03(日) 16:29:53.55
>>80
確かに素のmalloc()/free() を直にソースに散らばらせるのは好ましくないね
QZですらアロケータ経由だったようだし
昔のlisp処理系ではタイプごとにアロケータを別に準備していたようだねセル用とかね64KiBのシステム用だったけれど
2013/02/03(日) 16:30:48.52
>>55
32ビットだとメモリ空間は4Gだろ。32ビットlinuxでmalloc(1M)を繰り返すと、
4097回目には何が返ってくる?
ああ、返さずに自殺という選択肢もあるか。
2013/02/03(日) 16:31:17.25
>>81
>free楽勝と豪語しているfree必須バカは全くバグのないプログラムを作れるらしいぞ。wwww
楽勝とはいっていないがmalloc()/free()くらいは完全に管理できるだろうねアロケータを準備したりしてね
お前はそれができないからmalloc()/free()を使わないんだろう?
死ね
2013/02/03(日) 16:32:12.21
>>86
スレッド生成時には好きに変えられるんだ馬鹿
死ね
2013/02/03(日) 16:33:35.98
(このままじゃくさおが生霊に殺されそう…)
2013/02/03(日) 16:34:36.64
>>90
憲法すら読んだことがないとはねえ
中卒?
98デフォルトの名無しさん
垢版 |
2013/02/03(日) 16:40:00.25
>>89
CreateThreadは引数でスタックサイズ与えるんだから自明の事。www
pthreadしか知らないバカか。 wwwww
2013/02/03(日) 16:43:17.30
>>98
自明なのに「マルチスレッドだと、スタックサイズが固定になる」
って言いきった人がいるらしいですよw
生成時にいくらでも変えられるのにどのへんが固定なんでしょうねw
2013/02/03(日) 16:44:08.32
炎上学習法が効果的に利いていますね
2013/02/03(日) 16:44:14.74
1.スタックサイズは固定だよバカ
2.(1へ)生成時に設定できるよ
3.(2へ)生成時に設定できるの知らないのかバカ

3は2に対してどのような作用を及ぼしているんだろう
さすがに草生やさないと会話できないだけあって文盲過ぎる
2013/02/03(日) 16:44:31.10
>>93
ちゃんとポインタが返ってきますよ。
楽観的ですから、使うときにはあいてるかもしれないですしね。
103デフォルトの名無しさん
垢版 |
2013/02/03(日) 16:46:05.71
くさおはどうして日本語が不自由なの?
2013/02/03(日) 16:47:41.81
>>103
頭が不自由だからですよ。
2013/02/03(日) 16:48:20.91
>>98
pthreadもスタックサイズくらい変えられるが。
2013/02/03(日) 16:57:20.49
くさお敗走wwwwww
107デフォルトの名無しさん
垢版 |
2013/02/03(日) 16:59:38.11
>>94
お前やっぱりバカだ。 wwww
freeするにはfreeする対象を列挙する必要があるんだが。wwww
free楽勝と豪語していたfree必須バカのお仲間は単純な連結リストでもバグってたぞ。wwww

>>99
シングルスレッドなら必要に応じてOSが伸ばしてくれるが、マルチスレッドでは生成した後は固定。わかるかバカ。wwww

>>81を読んでスレッド生成時のスタックサイズが固定と読むバカがいるとは思わなかった。www
これからバカ相手に書くときはもっと気を付けよう。 wwww
2013/02/03(日) 17:00:13.09
スレッドのスタックサイズを変えるという話で
スレッドが動き出してから変えると認識した人
初めて見たわ。
スタックサイズを変えるなんて100%生成時しかあり得ないだろ。
2013/02/03(日) 17:05:53.43
>>107
君、スレに貼った超短いコードがいくつもバグってたよね?
2013/02/03(日) 17:08:01.36
>>109
freeを書くとバグるからfreeをやめよう、という宗教の教祖様ですから。
111デフォルトの名無しさん
垢版 |
2013/02/03(日) 17:13:05.67
>>109
バグったのは
http://toro.2ch.net/test/read.cgi/tech/1359585842/12
だけだが。

>>108
(シングルスレッドなら)メインスレッドのスタックは動き出してから自動的に伸びるだろ。
お前ら決定的に力量不足。言い換えればバカ。www
2013/02/03(日) 17:16:24.52
さすが力量マンの書くコードは力量が見て取れるナー
http://toro.2ch.net/test/read.cgi/tech/1359585842/12
2013/02/03(日) 17:21:54.48
mainの引数の仕様もしらんのか、こいつ。
2013/02/03(日) 17:44:02.24
>>111
直したつもりの奴でいいからさ
http://toro.2ch.net/test/read.cgi/tech/1359585842/15

argcが0以上をチェックする目的と
argv[0]を"-exit"と比較する意味を説明してくれ
115デフォルトの名無しさん
垢版 |
2013/02/03(日) 17:46:07.76
おーい、このバカ(>>113)が何言ってるのか翻訳してくれ。wwww
ANSI C99 5.1.2.2.1 Program Startupの↓これ以外の事なのか?
バカ同士ならわかるだろ。 www

int main(int argc, char *argv[]) { /* ... */ }
or equivalent;9) or in some other implementation-defined manner.
--
9) Thus, int can be replaced by a typedef name defined as int, or the type of argv can be written as
char ** argv, and so on.
2013/02/03(日) 17:49:14.79
>>103
憲法も読んだことないんですって
2013/02/03(日) 17:49:49.96
>>107
>シングルスレッドなら必要に応じてOSが伸ばしてくれる
本当か?
118デフォルトの名無しさん
垢版 |
2013/02/03(日) 17:58:22.92
>>114
特別だぞ。バカ。wwww

> argcが0以上をチェックする目的と
5.1.2.2.1 Program startup
2 If they are declared, the parameters to the main function shall obey the following
constraints:
The value of argc shall be nonnegative

> argv[0]を"-exit"と比較する意味を説明してくれ
free必須バカが正常系はfreeしろ、シグナル終了などの異常系はfreeしなくていい
例外とかいってるから、異常系ではないexecveで終了してみた。wwww
2013/02/03(日) 18:03:56.79
>>118
argv[0] って普通プログラムの名前とかパスとかが入っているんですよね?これって環境依存?
120デフォルトの名無しさん
垢版 |
2013/02/03(日) 18:09:59.75
>>119
procfs使ってるんだから環境依存に決まってんだろ。バカ。wwwww
mainのargvにはexecveに与えたものが渡される。 そんな事も知らないで言いがかり付けてんのかよ。wwww
2013/02/03(日) 18:15:54.29
execveで呼ばれたときにargv[0]は"/proc/???/exe"みたいなのなるだろ、つってんだよ
122デフォルトの名無しさん
垢版 |
2013/02/03(日) 18:17:14.77
なんねーよ。バカ。wwwww
なんねーよ。バカ。wwwww
なんねーよ。バカ。wwwww
なんねーよ。バカ。wwwww
なんねーよ。バカ。wwwww
なんねーよ。バカ。wwwww
なんねーよ。バカ。wwwww
なんねーよ。バカ。wwwww
なんねーよ。バカ。wwwww
なんねーよ。バカ。wwwww
123デフォルトの名無しさん
垢版 |
2013/02/03(日) 18:18:38.59
また一匹伝説のバカが生まれる瞬間に立ち会ってしまった。 wwww
2013/02/03(日) 18:21:29.24
argcがネガチブだったら、何もしないで終了した方がいいと思うの
2013/02/03(日) 18:29:59.18
nonnegativeって規格で決まってるんだからダメだろ。バカ。wwww
それにexecveのargvになに渡すとネガティブになるんだよ。wwwww

"-exit"渡さないという方法もあるだろうけど、それで動くか確信持て
なかったので確実に動く"-exit"渡した。 wwww
126デフォルトの名無しさん
垢版 |
2013/02/03(日) 18:33:05.42
今日も予定外かつ規格外のバカが釣れた。wwww
こういうバカがfree楽勝。バグなんか作らないと豪語している。笑うしかないな。 wwwww

> From: [121] デフォルトの名無しさん <sage>
> Date: 2013/02/03(日) 18:15:54.29
>
> execveで呼ばれたときにargv[0]は"/proc/???/exe"みたいなのなるだろ、つってんだよ
2013/02/03(日) 18:34:13.45
gcc -o "-exit"
2013/02/03(日) 18:35:47.81
流れ追ってなくてよく分からないけど
http://toro.2ch.net/test/read.cgi/tech/1359585842/15
みたいなプログラム書く人が規格外のバカだっていうのはわかった
2013/02/03(日) 18:39:35.71
freeでバグるためなら、どんな阿呆で無意味なソースでも書いて見せます。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況