【发布时间】:2015-01-12 22:15:35
【问题描述】:
我不知道发生了什么 - 但不知何故我的代码正在破坏堆
....
unsigned char *buf[2] = {0};
buf[0] = new unsigned char(sizeof(BITMAPFILEHEADER));
buf[1] = new unsigned char(sizeof(BITMAPINFOHEADER));
if(! buf[0] || ! buf[1])
{
std::cout << "running outta memory " << std::endl;
return false;
}
file.read((char*)buf[0], sizeof(BITMAPFILEHEADER));
file.read((char*)buf[1], sizeof(BITMAPINFOHEADER));
m_bmpHeader = (BITMAPFILEHEADER*) buf[0];
m_bmpInfo = (BITMAPINFOHEADER*) buf[1];
if(m_bmpHeader->b_filetype[0] != 'B' || m_bmpHeader->b_filetype[1] != 'M' ||
m_bmpInfo-> compression != 0 || m_bmpInfo-> bits_per_pixel != 24)
{
std::cout << "Not a valid BMP file..Supporting 24 bit images only" ;
return false;
}
m_data = new unsigned char[m_bmpInfo->imagesize];
if(! m_data)
{
std::cout << "running outta memory " << std::endl;
return false;
}
堆在m_data = new unsigned char[m_bmpInfo->imagesize];点处损坏
如果我调试代码 - 它会在 fstream 处停止;里面模板化_Fgetc有点说EOF被击中了
提前感谢您的帮助
【问题讨论】:
-
buf[0]和buf[1]指向单个char。你的意思可能是new unsigned char[sizeof(BITMAPFILEHEADER)]; -
你应该这样回答。
-
旁注——如果
if (!m_data)行的内存不足,则会发生内存泄漏。使用std::vector或智能指针代替裸指针。 -
啊..谢谢你的帮助..
标签: c++ memory heap-memory new-operator fstream