私は非常に最小限のメモリ読み取りライブラリを構築して、そこからいくつかunsigned int
の を読み取ろうとしました。ReadUnsignedInt
ただし、メソッドが戻りたいときに、「HEAP CORRUPTION DETECTED」というエラー メッセージが表示されます。
ヒープ破損が検出されました。CRT は、アプリケーションがバッファーの終了後にメモリに書き込んだことを検出しました。
私が読んだように、これは何かを二重に削除しようとするときの原因かもしれません。これは の誤った使用が原因である可能性がありますが、何が間違っているのstd::tr1::shared_ptr
か特定できません。コードは次のとおりです (エラー処理は省略)。
unsigned int Memory::ReadUnsignedInt (unsigned int address) const {
std::tr1::shared_ptr<byte> bytes =
this->ReadBytes(address, sizeof(unsigned int));
return *((int*)bytes.get());
// correct value (how to improve this ugly piece of code?)
}
std::tr1::shared_ptr<byte> Memory::ReadBytes (
unsigned int address, int numberOfBytes) const
{
std::tr1::shared_ptr<byte> pBuffer(new byte(numberOfBytes));
ReadProcessMemory(m_hProcess.get(), (LPCVOID)address,
pBuffer.get(), numberOfBytes * sizeof(byte), NULL))
return pBuffer;
}