Ciao a tutti,
io ho la necessità di creare in memoria un array tridimensionale di array di strutture, ed inizializzarlo con determinati parametri.
L'array in questione rappresenta una scacchiera tridimensionale, ovvero un cubo costituito da NxNxN cubi di K vertici ognuno.
Questo è il mio codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
float x;
float y;
float z;
} Vertex3D;
#define cubeVertexCount 276
#define CELLS_PER_SIDE 8
Vertex3D cubeVertexData[cubeVertexCount];
Vertex3D (*model)[CELLS_PER_SIDE][CELLS_PER_SIDE][CELLS_PER_SIDE][cubeVertexCount];
int main(int argc, char **argv)
{
int modelVertexCount = cubeVertexCount * CELLS_PER_SIDE * CELLS_PER_SIDE * CELLS_PER_SIDE;
int modelSize = modelVertexCount * sizeof(Vertex3D);
model = malloc(modelSize);
int modelEndAddress = model + modelSize;
int x = 0, y = 0, z = 0, i = 0;
for (x = 0; x < CELLS_PER_SIDE; x++) {
for (y = 0; y < CELLS_PER_SIDE; y++) {
for (z = 0; z < CELLS_PER_SIDE; z++) {
Vertex3D (*cellModel)[cubeVertexCount] = &((*model)[x][y][z]);
memcpy(cellModel, cubeVertexData, cubeVertexCount * sizeof(Vertex3D));
printf("Cell[%d][%d][%d]'s address: %d\n", x, y, z, cellModel);
for (i = 0; i < cubeVertexCount; i++) {
(*cellModel[i]).x += x * 2;
(*cellModel[i]).y += y * 2;
(*cellModel[i]).z += z * 2;
printf("\tVertex[%d]: x=%d, y=%d, z=%d\n", i, (*cellModel[i]).x, (*cellModel[i]).y, (*cellModel[i]).z);
}
}
}
}
return 0;
}
Nel mio progetto vero l'array cubeVertexData è dichiarato e inizializzato staticamente in un file .h (contiene un modello 3D creato ed esportato in formato opportuno da Blender), per questo motivo lo copio ad ogni iterazione del ciclo for (z...), per poi andare a modificare con un offset i campi x,y,z della struttura Vertex3D.
Il problema è che ottengo sempre un Segmentation Fault, nonostante l'ide non mi dia alcun warning...
dove sbaglio?
Grazie in anticipo!