使用C中的calloc()进行分段错误

时间:2016-11-21 04:29:51

标签: c bitmap malloc calloc

使用 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);

    }
}

如果有人需要更多信息,请告诉我。

0 个答案:

没有答案