- ベストアンサー
_dupenv_s関数でメモリリーク
VC++2005のMFCにてアプリを作成しています。 環境変数「TEST_ENV」の値を「OFF」にあらかじめ設定し、 _dupenv_s()関数にて変数の値を読込むプログラムなのですが、 プログラムをデバッグモードで実行し出力欄を見ると、 「Detected memory leaks!」と表示され、 原因箇所を探ると、どうやら ============================================== char* pGetEnv; size_t len; _dupenv_s( &pGetEnv, &len, "TEST_ENV" );←ここ ============================================== にて発生しているようです。 MSDNによると、lenにはバッファ容量を指定とあるので、 原因として、lenに何も指定されておらず、リークが発生していると考え、 Webで方法を色々調べたのですが、どのサイトも同じような書き方で、 解決法が分かりません。 どなたかご存知の方おられましたら、ご教授お願い致します。 なお下記にメッセージログを記載します。 Detected memory leaks! Dumping objects -> {73} normal block at 0x003A7018, 4 bytes long. Data: <OFF > 4F 46 46 00
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
_dupenv_sが0を返したかどうかをチェックして 関数が成功した『0』を返してきたのであれば確保されたpGetEnvが 用済みになって時点でfreeなどで開放しましょう
その他の回答 (2)
- php504
- ベストアンサー率42% (926/2160)
dummさんの参考URLにある 使用例 を見てみましょう
「free の呼び出しによるメモリの解放は、呼び出し元プログラムが行います。」って書いてるのになー、MSDNに
お礼
free( pGetEnv ); を追加することで解決しました。 全くの思い違いだったようです。。 ポインタを扱う際はもっと慎重にならないといけないですね。 また今後は思い込みでデバッグしないよう気をつけます。 問題解決したので、失礼ながらまとめてお礼とさせて頂きます。 ご回答ありがとうございました。