#pragma pack(push, 1)
typedef struct
{
/*...*/
unsigned int dataoffset; //No of bytes before actual pixel data
}HEADER;
typedef struct
{
/*...*/
unsigned int width;
unsigned int height;
unsigned short bits_per_pixel; //code is written for 24 bits only and No other format is supported..
/*...*/
}INFO_HEADER;
typedef struct
{
unsigned char b;
unsigned char g;
unsigned char r;
}COLORMAP;
#pragma pack(pop)
int main()
{
// Var decl.
INFO_HEADER *pHeader = NULL;
FILE *pImage;
COLORMAP **ppColors;
/*...*/
/* File opened in read, binary mode, memory allocated for pHeader*/
fread (pHeader, sizeof(INFO_HEADER), 1, pImage);
/*Next block is actually problematic.. Posting 'as is' from my code*/
ppColors = (COLORMAP**)malloc((pHeader -> height) * sizeof(COLORMAP));
for(i = 0 ; i < pHeader -> height ; i++)
ppColors[i] = (COLORMAP*)malloc(pHeader -> width * sizeof(COLORMAP));
fseek(pImage, pHeader -> fileheader.dataoffset, SEEK_SET);
for (i = 0 ; i < pHeader -> width ; i++)
{
for (j = 0 ; j < pHeader -> height ; j++)
{
fread(&b, sizeof(unsigned char), 1, pImage);
fread(&g, sizeof(unsigned char), 1, pImage);
fread(&r, sizeof(unsigned char), 1, pImage);
ppColors[i][j].b = b;
ppColors[i][j].g = g;
ppColors[i][j].r = r;
printf("width = %d height = %d %d:\t", i, j, cnt);
printf("%d ", (int)ppColors[i][j].b);
printf("%d ", (int)ppColors[i][j].g);
printf("%d\n", (int)ppColors[i][j].r);
cnt++;
}
}
/*And at last free()ing..*/
for(i = 0 ; i < pHeader -> height ; i++) free(ppColors[i]);
free(ppColors);
cleanup();
return(0)
}
可能重复:HTTP://stackoverflow.com/questions/1568042/optimal-way-to-free-a-malloced-2d- array-in-c结构的2D阵列 - malloc()和游离()
虽然上面的链接无法解决我的问题。
- 我用完了内存。我有malloc()ed为高度,然后为每个高度,宽度再次malloc()编辑。我正在尝试仅处理宽度X高度域。这似乎是问题与高度。如果更改
ppColors = (COLORMAP**)malloc((pHeader -> height) * sizeof(COLORMAP));
到 ppColors = (COLORMAP**)malloc((pHeader -> height + 6) * sizeof(COLORMAP));
那么这个问题就会消失。
- 但是,在免费()ing的时候,我在核心转储中获得了双倍空闲/损坏。
我该死的确定我在某个地方出错..我不指望有人纠正我的代码,我只是运行它。只是暗示会做..
感谢 装饰
啊..问题是第一个子弹点什么。对于第二个项目符号 - >对不起,我已经在发布之前编辑了代码..并发布'原样'..但我仍然不明白为什么'sizeof(COLORMAP *)'..?你能详细解释一下..吗? – Adorn
@Adorn很高兴帮助。我已经去更新我的答案了。让我知道如果它仍然不清楚。 – simonc
That's clear ..谢谢。 – Adorn