gpt4 book ai didi

c - 获取随机分割错误

转载 作者:行者123 更新时间:2023-11-30 14:54:13 25 4
gpt4 key购买 nike

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

最佳答案

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

根据 GNU C Library手册:

If the open fails, fopen() returns a null pointer.

fopen() 可能由于各种原因(但不限于)给出 NULL 值:

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

建议查看errno如果 fopen() 返回 NULL

关于c - 获取随机分割错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46869678/

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