Estoy trabajando con una matriz bidimensional de estructuras que es parte de otra estructura. No es algo con lo que he hecho mucho, así que estoy teniendo un problema. Esta función termina fallando después de llegar al ciclo de "prueba" para el final. Imprime una línea correctamente antes de seg seg.Problema de codificación usando una matriz de 2 d construcciones dentro de otra estructura en C
Las partes de mi código que leen datos en una matriz ficticia de 2 d construcciones funciona muy bien, por lo que debe ser mi matriz de asignación para ser parte de otra estructura (la imageStruct).
Cualquier ayuda sería muy apreciada!
/*the structure of each pixel*/
typedef struct
{
int R,G,B;
}pixelStruct;
/*data for each image*/
typedef struct
{
int height;
int width;
pixelStruct *arr; /*pointer to 2-d array of pixels*/
} imageStruct;
imageStruct ReadImage(char * filename)
{
FILE *image=fopen(filename,"r");
imageStruct thisImage;
/*get header data from image*/
/*make a 2-d array of of pixels*/
pixelStruct imageArr[thisImage.height][thisImage.width];
/*Read in the image. */
/*I know this works because I after storing the image data in the
imageArr array, I printed each element from the array to the
screen.*/
/*so now I want to take the array called imageArr and put it in the
imageStruct called thisImage*/
thisImage.arr = malloc(sizeof(imageArr));
//allocate enough space in struct for the image array.
*thisImage.arr = *imageArr; /*put imageArr into the thisImage imagestruct*/
//test to see if assignment worked: (this is where it fails)
for (i = 0; i < thisImage.height; i++)
{
for (j = 0; j < thisImage.width; j++)
{
printf("\n%d: R: %d G: %d B: %d\n", i ,thisImage.arr[i][j].R,
thisImage.arr[i][j].G, thisImage.arr[i][j].B);
}
}
return thisImage;
}
(En caso de que usted se está preguntando por qué estoy usando una matriz ficticia, en primer lugar, así que es porque cuando empecé a escribir este código, no podía encontrar la manera de hacer lo que estoy tratando de hacer ahora.)
EDITAR: Una persona sugirió que no inicialicé mi matriz de 2-d correctamente en el typedef para la imageStruct. ¿Alguien puede ayudarme a corregir esto si es realmente el problema?
Un lado: si trabaja con píxeles, es posible que desee considerar un búfer lineal plano, luego el punto índice (x, y) con búfer [y * ancho + x]. Eso se hace con bastante frecuencia, y podría ser beneficioso si alguna vez tiene que pasar ese búfer al código de otra persona que podría asumir ese formato. – asveikau
¡Gracias por el consejo! Lo consideraré. ¡Entonces podría olvidar este lío con las matrices en 2d! – KMM
He llegado a la conclusión de que no hay ninguna esperanza en tratar de hacer una matriz 2-D como parte de una estructura. Cambié a una matriz 1-D y todo está funcionando ahora. Gracias a todos los que me ayudaron, este es de lejos el foro de programación más útil que he conocido. – KMM