Я создаю программу, которая сохраняет информацию в матрице пикселей (структура). Пиксель должен иметь свой цвет (другую структуру), цвет - это структура с тремя целыми числами (красный = vermelho, зеленый = verde и синий = azul). Но когда я их устанавливаю, их значение меняется сразу после окончания for. Например, если я поместил значение 250 во все красные атрибуты пикселей, это каким-то образом изменится, если я напечатаю их после того, как for закончится, если я напечатаю их, пока for работает, значения правильные.
I 'Я также читаю информацию о значениях красного, зеленого и синего значений файла, но я напечатал их, и они правы.
Ниже приведены функции, которые я использую, и у меня естьпроблемы в функции, понятные из этого, я получаю «250 0 0» (правильное значение) для всех пикселей внутри for, но значения меняются иногда на «250 0 0», «0 250 0» и «250 250 0"во втором для внутренней функции очистки.
Я попытался напечатать все переменные, но кажется, что они каким-то волшебным образом меняются после того, как я установил их в первом для. Я не очень опытный в C, поэтому я действительно потерян прямо сейчас.
typedef struct cor{
int vermelho;
int verde;
int azul;
} Cor;
typedef struct pixel{
Cor cordopixel;
} Pixel;
typedef struct imagem{
Pixel **pintura;
int largura;
int altura;
} Imagem;
void image(FILE *pont_arq, Imagem *desenho){
int i, j, k;
fscanf(pont_arq, "%d %d", &i, &j);
desenho->altura = j; //value equals 400
desenho->largura = i; //value equals 600
printf("Cria imagem %dx%d\n", i, j);
desenho->pintura = calloc(i, sizeof(Pixel*));
for (k = 0; k < i; ++k){
desenho->pintura[k] = calloc(j, sizeof(Pixel));
}
printf("Saiu\n");
}
int* lerIntArquivo(FILE *pont_arq, int inicio, int vezes, int val[]){
if(vezes==inicio-1){
fscanf(pont_arq, "%d", &val[inicio]);
return val;
}else{
fscanf(pont_arq, "%d", &val[inicio]);
lerIntArquivo(pont_arq, inicio+1,vezes, val);
}
}
void clear(FILE *pont_arq, Imagem *desenho){
int val[3], i, j;
lerIntArquivo(pont_arq, 0, 3, val);
printf("Cria imagem");
printf("%d %d %d\n",val[0],val[1], val[2]); //val[0]=250 val[1]=0 val[2]=0
//this for is printing the right values
for (i = 0; i < desenho->altura; ++i){
for (j = 0; j < desenho->largura; ++j){
printf("%d %d\n",i,j);
desenho->pintura[i][j].cordopixel.vermelho = val[0];//setting the values
desenho->pintura[i][j].cordopixel.verde = val[1];//setting the values
desenho->pintura[i][j].cordopixel.azul = val[2];//setting the values
printf("%d ", desenho->pintura[i][j].cordopixel.vermelho);
printf("%d ", desenho->pintura[i][j].cordopixel.verde);
printf("%d\n", desenho->pintura[i][j].cordopixel.azul);
}
}
//this for is not printing the right values
for (i = 0; i < desenho->altura; ++i){
for (j = 0; j < desenho->largura; ++j){
printf("%d ", desenho->pintura[i][j].cordopixel.vermelho);
printf("%d ", desenho->pintura[i][j].cordopixel.verde);
printf("%d\n", desenho->pintura[i][j].cordopixel.azul);
}
}
printf("\n");
}
Там не было никаких сообщений об ошибках, только неправильные значения.