最近の環境ではmalloc()で確保したメモリ領域が初期化(0クリア)されてる件

C言語の規格では、malloc()した領域は不定値になっています。

malloc()は単にメモリ領域を割り当てるだけなので、malloc()で返される領域にはその前に書き込まれていたデータがそのまま残っています。

ただ、最近の環境ではちょっと事情が違うようです。 最近のOSはセキュリティ上の理由からmalloc()でメモリ確保した領域でも暗黙的に0クリアされているようです。

ただし、こんな暗黙的な挙動を前提にしたコードは書かないようしましょう。そんなコード、特定の環境でしか動きませんから。

ちなみに、Windows7 + VC2013では、Releaseビルドでは0クリアされ、Debugビルドではガベージデータ(0xFE)で埋められてました。

『Releaseビルドなら動くけど、Debugビルドだと動かない』という場合には、malloc()した領域のメモリクリア漏れを疑ってみてください。