gpt4 book ai didi

C++动态分配(像素图)

转载 作者:行者123 更新时间:2023-11-28 05:45:49 26 4
gpt4 key购买 nike

我是新手(内存分配和类)

我正在尝试制作(每像素 1 位)的像素图,所以我正在尝试制作动态内存分配中的字符数组..

class pixmap
{
private:
char _rows;
int _width, _height;
char **pix_m;
public:
pixmap(int , int);
uint8_t getpixel(int, int);
void printl(int);

};

所以我想做的是,例如,如果我想要 (100 x 100) 的像素图 .. 我分配 char [100][1+100/8] 的二维数组 .. 其中 char 存储 8 位

pixmap::pixmap(int width, int height)
{
_width = width;
_height = height;
_rows = width/8+1;

pix_m = (char**) (calloc(height,_rows));
for (int x =0 ; x < _rows; x++)
{
pix_m[x] = (char*)calloc(_rows,sizeof(char*));
}

printf("%d\r\n",_rows);
}

这是我的类(class)结构^^

在这里我应该打印一行像素:

void pixmap::printl(int y)
{
int pix;
for (int i = 0; i < _rows-1; i++)
{
for (int x= 0; x<8; x++)
{
pix = pix_m[y][i]&(0x01<<(7-x));
printf("%d",pix!=0);
}
}
int q = _width - (_rows-1)*8;
for (int x= 0; x<q; x++)
{
pix = pix_m[y][_rows-1]&(0x01<<(7-x));
printf("%d",pix!=0);
}
}

在主函数中:

int main()
{
pixmap img(50,100);
img.printl(1);

getch();
}

问题是当我尝试打印大于 6 的行时.. 程序崩溃.. 我不应该能够 printl(0-99) 吗???

代码: http://pastebin.com/9X8r9PWe

最佳答案

您对calloc 函数的使用是错误的。

pix_m = (char**) (calloc(height,_rows));

此代码无法正常工作。据我所知,您需要 char*_rows 元素 vector 。它实际上分配了每个大小等于 sizeof(_rows) 的高度元素,因此在您的情况下为 sizeof(char) 。相反,你应该调用

calloc(_rows, sizeof(char*));

你的第二个电话应该是

pix_m[x] = (char*)calloc(height,sizeof(char));

编辑:在分析了你的其余代码后,你似乎把它搞砸了一点,因此它应该是:

pix_m = (char**) (calloc(height,sizeof(char*)));
for (int x =0 ; x < height; x++)
{
pix_m[x] = (char*)calloc(_rows,sizeof(char));
}

关于C++动态分配(像素图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36238798/

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