08/07/25 12:46:02
malloc/freeごときをきちんと管理できないやつは一流のプログラマとはいえないだろうよ。
あまりに複雑でどうしてもちゃんとfreeできないというならば、それはGCを使えということだ。
113:デフォルトの名無しさん
08/07/25 13:00:42
>>112
ちゃんとfreeできないほど複雑にしてしまうのは、一流のプログラマのやることじゃない。
114:デフォルトの名無しさん
08/07/25 13:19:58
大学の演習ぐらいならな。
115:デフォルトの名無しさん
08/07/25 13:26:09
いやいや。
プロの仕事だからこそ、参照カウントやGCという乱暴な解決手段を避けるのですよ。
それらは問題解決に役立つ便利なものに見えて、かえって問題をややこしくするから。
116:デフォルトの名無しさん
08/07/25 13:42:20
自分で複雑怪奇な設計しておいて、
複雑でどうしてもちゃんとfreeできないんだから仕方ないだろ! って音をあげつつ逆切れするのが三流プログラマ。
複雑にならないように設計し、あるいは、複雑にしろと命令されるような仕事をやらなくて済むようにするのが一流プログラマ。
117:デフォルトの名無しさん
08/07/25 13:48:46
C++で、コンテナ使いまくりのプログラムをCにコンバートする羽目になった洩れ。
半泣きになりながらどこでfreeするか検討したよ。
で、終わってからatexit()みたいな仕掛けでデストラクタもどきを実装すればよかったことに気づいた罠。
118:デフォルトの名無しさん
08/07/25 15:17:25
GCは乱暴じゃないよ。
119:デフォルトの名無しさん
08/08/02 22:32:52
>>92
本当ですか?
120:デフォルトの名無しさん
08/08/06 11:37:47
OSによる
121:デフォルトの名無しさん
08/08/06 19:18:55
>>120
BSDは?Linuxは?win32は?
122:デフォルトの名無しさん
08/08/07 13:35:49
そいつらはfreeで解放できるようなメモリなら真
123:デフォルトの名無しさん
08/08/08 11:43:36
メモリリークのバグを発見する手段として、
プロセスが終了する時点でfreeされていないメモリブロックの有無を確認する
というのがあるのだが。
乱暴にfreeを省かれていると、そういう確認ができなくなってしまう。
124:デフォルトの名無しさん
08/08/09 09:26:21
リークする可能性がある、リークすると困るようなメモリならfreeするでしょう。
そうじゃなければ勝手にしろってだけでは?
125:デフォルトの名無しさん
08/08/09 10:30:13
>>124
どれがリークに繋がらないfree省略で、
どれがリークに繋がるfree忘れなのか、
ちゃんと管理できていればいいんだがな。
つまり、
メモリリークの有無を確認するときのみ、
前者についてfreeを呼び出すようにマクロで切り換えてコンパイルできるように・・・
ってするくらいなら、freeって直に書いてもいいんじゃないか?
126:デフォルトの名無しさん
08/08/10 08:46:52
>>123
そうですよね。宿題スレで
p = malloc(sizeof(struct node)) + 1;
と書いてしまって、自力で誤りがみつけられず、散々悩みました。
私の環境では、のミス含みでは一見、振る舞いに異常がみられず、ただリリースができない、という状況でした。
free() をきちんとかき動作確認をすることで、malloc() にミスがないことが同時に確認できるわけです。
127:デフォルトの名無しさん
08/08/10 10:01:46
>>126
C++にするだけで解決する問題だね。free()するかどうかは殆ど関係ない。
128:デフォルトの名無しさん
08/08/10 11:03:19
>>127
C++なら尚更、ちゃんとやらないと、大変なことになるぞ。
129:デフォルトの名無しさん
08/08/11 11:06:20
アライメント違反したら死ぬような環境ならすぐ分かるね。
130:デフォルトの名無しさん
08/08/11 11:54:10
>>129
今ならそうですが、はじめてみためには、free() がうまくいかないねー、くらいしかわからなかったのでした。
131:デフォルトの名無しさん
08/08/11 12:23:47
freeがうまく行かないって言うのは、けっこう聞きますね。
mallocが管理してるところをぶっ壊してるとか。
ものによるけど、それなりの規模のプログラムなら、
データ構造ごとにalloc/free用の関数作っちゃうから、
直にmalloc/free呼ぶことはほとんど無い。
132:デフォルトの名無しさん
08/08/11 14:02:19
Windows用のVC++なんかは、
デバッグビルドではヒープ破損のチェックとか自動で行われるんだが・・・。
133:デフォルトの名無しさん
08/08/11 14:17:54
なんかの書物に PHK malloc() の実装がありました。それをみると、今の malloc() では管理領域は簡単には壊れないようにできているようですね。
134:デフォルトの名無しさん
08/08/19 14:07:30
むしろ簡単に壊れてくれたほうがバグ発見が早くなる。
135:デフォルトの名無しさん
08/09/07 05:00:14
hosu
136:デフォルトの名無しさん
08/09/25 12:21:50
>>133
ポインタ求む。
137:デフォルトの名無しさん
09/02/16 13:16:31
もう話おわった?
138:デフォルトの名無しさん
09/02/16 15:46:16
誰か上の人達にstl教えてあげて。
139:デフォルトの名無しさん
09/02/16 15:48:38
まだ終らんよ