【问题标题】:Heap Corruption Error - Allocating memory [closed]堆损坏错误 - 分配内存
【发布时间】: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-&gt;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


【解决方案1】:
new unsigned char(sizeof(BITMAPFILEHEADER));

这不分配数组!它分配一个unsigned char

写:

new unsigned char[sizeof(BITMAPFILEHEADER)];

您稍后会在代码中正确理解,所以这可能只是一个错字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-23
    • 2015-05-16
    • 1970-01-01
    • 2012-07-27
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多