fc2ブログ

無精で短気で傲慢なプログラマ

UNIX や web やプログラムの技術的なことを中心に。

C のメモリ初期化

C で、
  while (1){
   char buf[256];
   memset(buf, 0, sizeof(buf));
   ...
 }
などと毎回メモリを 0 で塗りつぶす人がいるが、果たしてこれはよい習慣なのだろうか。

わたしは「適切に文字終端を管理していればこんな初期化は不要」派である。

しかし適切に文字終端を管理できない人はたくさんいる。そういう人にとっては、前回
ループの変数の内容が次ループにも引き継がれてしまう、という最悪の事態を避けるため
のよい方法なのだろう。実際、他人の書いたソースを眺めていて、memset がなかったら
落ちるなぁと思ったことは多々ある。

でもわたしには、ただのバグ隠蔽工作にしか見えない。VC++ でデバッグビルドをした
バイナリをリリースするようなものだ (VC++ のデバッグビルドでは、変数は 0xcdcdcdcd に
初期化される、らしい)。

というわけで、これまでは
 - わたしは memset による初期化はしない
 - 他人が memset するのは口出ししない (でも俺はしないけどね、くらいは言うかも)
 - 何も知らない初心者には memset で初期化しろとは言わない (適切な文字終端管理が
  できるようになることを願って)
というふうにしてきた。でもダブルスタンダードなので気持ち悪い。

世の中的にはどうなんでしょうね。
スポンサーサイト



PageTop

コメント


管理者にだけ表示を許可する
 

こんにちは

まったく同感.デバッガに頼り過ぎで,まず頭で動かそうと考えていない人が多すぎです.

匿名希望 | URL | 2005-12-12(Mon)08:17 [編集]