2017-01-16 13 views
-3

定義: 新しいXは、関数への引数として渡されたときにmemリークを引き起こしますか? <strong>ReadProcessMemory()</strong>の

ReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, 
        nSize, SIZE_T * lpNumberOfBytesRead); 

はこのようにそれをやって何か問題ありますか?

ReadProcessMemory(this->processHandle, 0, &ret, sizeof(int), new DWORD); 
+2

はい、メモリリークです。 –

+0

'ReadProcessMemory'が何をするかによって異なりますが、おそらくはyesです。 C++の本を読んだことはありますか?そうでない場合は、試してみてもC++を学ぶことはできません。私を信頼してください。 –

+0

説明することができます、なぜこれについて疑問がありますか? –

答えて

1

はい、問題があります。

テンポラリポインタが失われたため、その値にアクセスできないため、読み込まれたバイト数を特定することはできません。

また、DWORDオブジェクトを解放することはできません。したがって、メモリリークが発生します。

0

この場合、メモリリークが発生しています。新しいDWORDのアドレスを回復して削除することはできません。この関数の正しい使い方は、既存のDWORDのアドレスを指定してから読み取ることです。

DWORD bytesRead; 
ReadProcessMemory(this->processHandle, 0, &ret, sizeof(int), &bytesRead); 
// bytesRead can be read to see how many bytes were read 

関数が新しい変数へのポインタを受け入れ、それを内部的に削除することは奇妙ではありますが、不可能ではありません。ライブラリまたはAPIを使用する場合は、注意深くドキュメントをお読みください。

+1

関数が引数の値を何らかの方法で伝達して、呼び出し側がその引数を解放できるようにするのは、奇妙なことですが、不可能ではありません。 –

関連する問題