gpt4 book ai didi

c - 读取 PPM 时出现段错误

转载 作者:行者123 更新时间:2023-11-30 16:47:00 27 4
gpt4 key购买 nike

有人可以告诉我为什么运行此代码时会出现段错误吗?我正在尝试打开 P6 格式的 PPM 文件,第二行有它的尺寸,第三行有一个 255 常数。下面是代表每个像素的数字的“二维数组”。我知道每个像素(RGB)有 3 个数字,但我仍然希望将其全部放在 2D 数组中(一个像素的 3 种颜色彼此相邻)(这就是为什么我将 size[1] 乘以 3),但我我遇到了段错误。

感谢您的帮助:)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>


int main(int argc, char*argv[]){

char *fname = argv[1];
FILE* f = fopen(fname, "r");
char format[3];
int size[2];

//reading image format
fscanf(f,"%s", format);
printf("%s\n", format);

//reading size
fscanf(f,"%d %d", size, size+1);
printf("%d %d\n", size[0], size[1]);

//reading a constant - 255
int Constant=0;
fscanf(f,"%d", &Constant);

//mallocating a 2D array to store individual pixels
uint8_t **array=malloc (3*size[1]*size[0]*sizeof(uint8_t));

//reading pixels from file and storing into array
for(int i=0 ; i<size[1]; i++){
for(int j=0 ; j<size[0]*3 ; j++){
fread(array, size[0]*size[1]*3 , 1, f);

}
}

for(int k=0;k<size[1];k++){
for(int l=0; l<size[0]*3; l++){
printf("%d ", array[k][l]);
}
printf("\n");
}

return 0;
}

最佳答案

uint8_t **array=malloc (3*size[1]*size[0]*sizeof(uint8_t));

这不是 malloc 2D 数组的好方法。您首先必须分配数组中的“行”数,然后分配数组中每行的“列”数。

尝试将其替换为:

uint8_t **array = malloc(size[1] * sizeof(uint8_t*));
for (size_t i = 0; i < size[1]; ++i)
array[i] = malloc(3 * size[0] * sizeof(uint8_t));

关于c - 读取 PPM 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43537235/

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