- 1 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 04:21:39 ]
- 純真な若者に変なことを教えてしまわないように、
大学のプログラミング演習の課題をブラッシュアップしよう。
- 124 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 09:26:21 ]
- リークする可能性がある、リークすると困るようなメモリならfreeするでしょう。
そうじゃなければ勝手にしろってだけでは?
- 125 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 10:30:13 ]
- >>124
どれがリークに繋がらないfree省略で、 どれがリークに繋がるfree忘れなのか、 ちゃんと管理できていればいいんだがな。 つまり、 メモリリークの有無を確認するときのみ、 前者についてfreeを呼び出すようにマクロで切り換えてコンパイルできるように・・・ ってするくらいなら、freeって直に書いてもいいんじゃないか?
- 126 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 08:46:52 ]
- >>123
そうですよね。宿題スレで p = malloc(sizeof(struct node)) + 1; と書いてしまって、自力で誤りがみつけられず、散々悩みました。 私の環境では、のミス含みでは一見、振る舞いに異常がみられず、ただリリースができない、という状況でした。 free() をきちんとかき動作確認をすることで、malloc() にミスがないことが同時に確認できるわけです。
- 127 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 10:01:46 ]
- >>126
C++にするだけで解決する問題だね。free()するかどうかは殆ど関係ない。
- 128 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 11:03:19 ]
- >>127
C++なら尚更、ちゃんとやらないと、大変なことになるぞ。
- 129 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 11:06:20 ]
- アライメント違反したら死ぬような環境ならすぐ分かるね。
- 130 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 11:54:10 ]
- >>129
今ならそうですが、はじめてみためには、free() がうまくいかないねー、くらいしかわからなかったのでした。
- 131 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 12:23:47 ]
- freeがうまく行かないって言うのは、けっこう聞きますね。
mallocが管理してるところをぶっ壊してるとか。 ものによるけど、それなりの規模のプログラムなら、 データ構造ごとにalloc/free用の関数作っちゃうから、 直にmalloc/free呼ぶことはほとんど無い。
- 132 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 14:02:19 ]
- Windows用のVC++なんかは、
デバッグビルドではヒープ破損のチェックとか自動で行われるんだが・・・。
- 133 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 14:17:54 ]
- なんかの書物に PHK malloc() の実装がありました。それをみると、今の malloc() では管理領域は簡単には壊れないようにできているようですね。
- 134 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 14:07:30 ]
- むしろ簡単に壊れてくれたほうがバグ発見が早くなる。
- 135 名前:デフォルトの名無しさん [2008/09/07(日) 05:00:14 ]
- hosu
- 136 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 12:21:50 ]
- >>133
ポインタ求む。
- 137 名前:デフォルトの名無しさん [2009/02/16(月) 13:16:31 ]
- もう話おわった?
- 138 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 15:46:16 ]
- 誰か上の人達にstl教えてあげて。
- 139 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 15:48:38 ]
- まだ終らんよ
|

|