ブログ移転しました。新しいサイトはこちらです。
http://eng-notebook.com/
1秒後に自動的にジャンプします。
  

  


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


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

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


ただ、最近の環境ではちょっと事情が違うようです。

最近のOSはセキュリティ上の理由からmalloc()でメモリ確保した領域でも暗黙的に0クリアされているようです。

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


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

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



Sponsored Link


 
◆◇◆この記事が役に立ったらポチッとお願いします◆◇◆

 

テーマ : プログラミング
ジャンル : コンピュータ

おすすめ







 



カテゴリ