1
我正在努力爲XPM圖像分配內存。
我已經建立了我自己的圖書館具有以下功能:XPM圖像內存分配
XPM* initXPM (
unsigned int width,
unsigned int height,
unsigned int cpp,
unsigned int ncolors)
{
XPM *image;
image=(XPM*)malloc(sizeof(Color*) * (width * height) * cpp);
(*image).colta = (Color*) malloc(ncolors * sizeof(Color));
(*image).width = width;
(*image).height = height;
(*image).cpp = cpp;
(*image).ncolors = ncolors;
int i;
for (i = 0; i < ncolors; i++)
{
(*image).colta[i].pchars = (char*) malloc((cpp + 1) * sizeof(char));
}
(*image).data = (unsigned int**)malloc(height * sizeof(unsigned int*));
for (i = 0; i < height; i++)
{
(*image).data[i] = (unsigned int*) malloc(width * sizeof(unsigned int));
}
printf("init :height : %d , width :%d ncolors:%d , cpp : %d\n",(*image).height,(*image).width,(*image).ncolors,(*image).cpp);
return image;
}
的XPM結構如下:
typedef struct
{
unsigned int r,g,b; /* the red, green and blue components */
char *pchars; /* pointer to the character(s) combination */
} Color;
/* the number of characters for one color is contained into the XPM structure */
typedef struct
{
unsigned int width; /* width in pixels */
unsigned int height;
unsigned int cpp; /* number of characters per pixel */
unsigned int ncolors; /* how many colors we'll be using */
Color *colta; /* colors array */
unsigned int **data; /* the area that contains the image, */
/* width x height locations for */
/* indices into colta */
} XPM;
我打電話這樣的初始化函數:
XPM *image;
image = initXPM(200,200,1,2);
我已成功初始化XPM文件的值爲:(50,50,2,50)。如果我嘗試用200
而不是初始化文件它崩潰。
我想創建一個200x200 XPM文件,但它會中斷。使用電籬笆我發現它在我設置圖像寬度時崩潰。
我應該如何分配內存以便能夠像這樣使用它?
我試圖修改一下這個結構,如果我在我的主要方法中靜態聲明結構並將XPM圖像的地址發送到init函數,它會起作用,但我希望能夠像庫一樣使用它。
'(* image).colta' - *** nooooo!***只要執行'image-> colta'。並且[不要強制轉換'malloc()']的返回值(https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc/605858#605858)。 – 2015-03-02 19:09:12
我試過'image->'而不是'(* image).'但是結果是一樣的 – 2015-03-02 19:10:20
'image =(XPM *)malloc(sizeof(Color *)*(width * height)* cpp )'是非常可疑的,因爲你沒有在其中的任何地方使用'sizeof(XPM)'。 – 2015-03-02 19:10:42