gpt4 book ai didi

c - XPM 图像内存分配

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:27 25 4
gpt4 key购买 nike

我正在努力为 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;

我是这样调用init函数的:

XPM *image;

image = initXPM(200,200,1,2);

我已经成功地用值 :(50,50,2,50) 初始化了 XPM 文件。如果我尝试用 200 而不是 50 来初始化文件它崩溃了。
我想创建一个 200x200 XPM 文件,但它中断了。使用 electricfence 我发现当我设置图像的宽度时它会崩溃。
我应该如何分配内存才能像这样使用它?
我尝试对结构进行一些修改,如果我在 main 方法中静态声明结构并将 XPM 图像的地址发送到 init 函数,它就会起作用,但我希望能够像库一样使用它。

最佳答案

    image=(XPM*)malloc(sizeof(Color*) * (width * height) * cpp);

显然是错误的,但是由于这为除最小图像之外的所有图像分配了太多内存,因此它不会导致您提到的崩溃。尽管如此

  • image = malloc(sizeof *image); 是一个正确的分配

  • initXPM(200, 200, 2, 50); 在我的系统上不会崩溃

  • 您应该使用调试器(例如gdb)而不是efence来分析问题。

关于c - XPM 图像内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28817552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com