アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

_dupenv_sが0を返したかどうかをチェックして


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

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

」って書いてるのになー、MSDNに

参考URL:http://msdn.microsoft.com/ja-jp/library/ms175774 …
    • good
    • 0

dummさんの参考URLにある


使用例
を見てみましょう
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/02/23 13:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!