使用 malloc 或 calloc 时,我遇到了一些困难。我一直得到一个 seg错误,我测试了它的内存分配,之后我释放了内存。
该程序是调整BMP图像大小的练习。我已经能够成功地将标题复制到新文件中并水平调整所需图像的大小。当我找到要垂直调整大小的代码时,我遇到了问题。
我运行了调试器,由于seg故障,它在第二个循环后停止。我已经将calloc放在第二个循环中以及空闲调用中,我已经分配了一小块内存,并且读取和写入功能也类似,但这并没有改变任何东西。我仍然一直在犯一个错误。
这是有问题的代码:
// dynamic memory allocation for pixels
// RGBTRIPLE is a typedef struct made up of three 1 byte members
RGBTRIPLE *resizePixel;
//resize is the factor to resize the image by
resizePixel = calloc(resize, sizeof(RGBTRIPLE));
if (resizePixel == NULL)
{
printf("Horsefeathers! We're probably out of memory!\n");
return 5;
}
// loop to create vertical resizing
for (int m = 0; m < biHeight - 1; ++m)
{
for (int n = 0; n < bi.biWidth; ++n)
{
// reposition pointer to start of row in preparation for copying
fseek(outptr, -(tempBi.biWidth + resizePad), SEEK_CUR);
// read from outptr file resize-number of pixels
fread(&resizePixel, sizeof(RGBTRIPLE), resize, outptr);
// reposition file pointer to end of file
fseek(outptr, 0, SEEK_END);
// write to outptr file resize-number of pixels
fwrite(&resizePixel, sizeof(RGBTRIPLE), resize, outptr);
}
// release dynamic memory
free(resizePixel);
// adds padding to resized image
if (resizePad > 0)
for (int k = 0; k < resizePad; k++)
fputc(0x00, outptr);
}
}
如果有人需要更多信息,请告诉我。