• ベストアンサー

_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

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

_dupenv_sが0を返したかどうかをチェックして 関数が成功した『0』を返してきたのであれば確保されたpGetEnvが 用済みになって時点でfreeなどで開放しましょう

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

dummさんの参考URLにある 使用例 を見てみましょう

zigen8513
質問者

お礼

free( pGetEnv ); を追加することで解決しました。 全くの思い違いだったようです。。 ポインタを扱う際はもっと慎重にならないといけないですね。 また今後は思い込みでデバッグしないよう気をつけます。 問題解決したので、失礼ながらまとめてお礼とさせて頂きます。 ご回答ありがとうございました。

すると、全ての回答が全文表示されます。
noname#208124
noname#208124
回答No.2

「free の呼び出しによるメモリの解放は、呼び出し元プログラムが行います。」って書いてるのになー、MSDNに

参考URL:
http://msdn.microsoft.com/ja-jp/library/ms175774.aspx
すると、全ての回答が全文表示されます。
このQ&Aのポイント
  • WiFiをau光からソフトバンクエアーに変更した後、キヤノンのプリンターから印刷ができなくなりました。
  • 特に、TS3530モデルのプリンターを使用しており、この問題は、WiFi設定やネットワーク接続の見直しが必要です。
  • 解決策として、プリンターの再設定やネットワークの再チェックが有効です。また、キヤノンの公式サポートも参考にすると良いでしょう。
回答を見る

専門家に質問してみよう