堆损坏错误 - 分配内存
Heap Corruption Error - Allocating memory
我不知道发生了什么 - 但不知何故我的代码正在破坏堆
....
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 已被击中
提前感谢您的帮助
new unsigned char(sizeof(BITMAPFILEHEADER));
这不是分配数组!它分配了一个 unsigned char
.
写入:
new unsigned char[sizeof(BITMAPFILEHEADER)];
您稍后会在您的代码中得到正确的结果,所以这可能只是一个错字。
我不知道发生了什么 - 但不知何故我的代码正在破坏堆
....
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 已被击中
提前感谢您的帮助
new unsigned char(sizeof(BITMAPFILEHEADER));
这不是分配数组!它分配了一个 unsigned char
.
写入:
new unsigned char[sizeof(BITMAPFILEHEADER)];
您稍后会在您的代码中得到正确的结果,所以这可能只是一个错字。