【发布时间】:2009-10-14 16:45:42
【问题描述】:
我尝试构建一个非常简约的内存读取库,以从中读取一些unsigned ints。但是,当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;
}
【问题讨论】:
标签: c++ shared-ptr raii