larry, у тебя C используется ?
Если нет, вот вот это всё, только гораздо красивее
А код рабочий - у меня всё выделяется
struct BITMAP_FILE_TAG
{
private:
BITMAPFILEHEADER bitmapfileheader; // this contains the bitmapfile header
BITMAPINFOHEADER bitmapinfoheader; // this is all the info including the palette
PALETTEENTRY palette[256]; // we will store the palette here
UCHAR *buffer; // this is a pointer to the data
public:
int LoadBitmapFile(const char* filename,HWND hWnd=0)
{
FILE* file=fopen(filename, "r");
fread(&bitmapfileheader,sizeof(bitmapfileheader),1,file);
fread(&bitmapinfoheader,sizeof(bitmapinfoheader),1,file);
fseek(file,-(int)(bitmapinfoheader.biSize),SEEK_END);
if(bitmapinfoheader.biBitCount == 24)
{
buffer = new UCHAR[bitmapinfoheader.biSizeImage];//<<<<<
if(!buffer)
{
fclose(file);
if(hWnd)
{
MessageBox(hWnd, _T("Память не выделена!"), _T("Ошибка"), 0);
}
return(-1);
}
fread(&buffer,sizeof(bitmapinfoheader.biSizeImage),1,file);
}
fclose(file);
return(0);
}
void DeleteBuffer()
{
if(buffer)
{
delete buffer;
buffer=0;
}
}
~BITMAP_FILE_TAG()
{
DeleteBuffer();
}
};