获得随机分段错误

时间:2017-10-22 01:30:05

标签: c

我得到一个奇怪的分段错误:当我使用gcc -std = gnu90运行此C文件时出现11错误。从我读到的,我的代码中的某个地方超出了内存?但是,经过大量的调试后,我不确定它在哪里超过。对于一个小的bmp文件,我分别给出160和240的高度和宽度。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void brighten(int,int,char*);
//void contrast(int height, int width, char* file);
//void rotation(int height, int width, char* file);

#define HEADER_SIZE 54

int main(void) {
    printf("Enter the filename: ");
    char file[256];
    scanf("%s", file);
    printf("Enter the height and width (in pixels): ");
    int height, width;
    scanf("%d %d",&height,&width);
    strcat(file,".bmp");
    brighten(height,width,file);
    //contrast(height,width,file);
    //rotation(height,width,file);
    return 0;
}

void brighten(int height, int width, char* file) {
    FILE *input = fopen(file,"rb");
    FILE *output = fopen("copy1.bmp","wb");
    char header[HEADER_SIZE];
    unsigned char pixels[height][width * 3];
    fread(header,1,HEADER_SIZE,input);
    fread(pixels,1,height * width * 3,input);

    int r, c;

    for( r = 0; r < height; r++) {
        for(c = 0; c < width * 3; c++) {
            pixels[r][c] += 50;
            if( pixels[r][c] > 255) {
                pixels[r][c] = 255;
            }
            printf(" %c \n",pixels[r][c]);
        }
    }
    fwrite(header,sizeof(char), HEADER_SIZE,output);
    fwrite(pixels,sizeof(char),height * width * 3, output);
    fclose(input);
    fclose(output);
}

1 个答案:

答案 0 :(得分:1)

如@Chris评论,您应该检查fopen()是否返回NULL。对NULL指针执行读/写操作会导致分段错误。

根据GNU C Library手册:

  

如果打开失败,fopen()将返回空指针。

由于各种原因(但不限于),

fopen()可能会给NULL值:

  • 文件不存在
  • 没有文件所需的权限

如果fopen()返回NULL,建议您检查errno