C/Visual C - Matriz trimensional con punteros...

 
Vista:
sin imagen de perfil

Matriz trimensional con punteros...

Publicado por FAI (4 intervenciones) el 01/11/2005 12:05:32
Hola, no domino demasiado el manejo de punteros. Estoy intentando mejorar un programa donde tengo una matriz tridimensional de caracteres.

char Matriz[20][10000][16]

como véis es una matriz bastante grande y en la mayoría de los casos los dos primeros índices se quedan en valores mucho más pequeños de los declarados.

¿Como harías esto con punteros para no desperdiciar tanta memoria?. Seguro que para alguien que los domine esto es muy sencillo.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Matriz trimensional con punteros...

Publicado por chuidiang (73 intervenciones) el 01/11/2005 20:50:57
Hola:

Para tres dimensiones debes declarar así

char ***matriz;

Luego tienes que liarte a hacer news. Un new para la primera dimensión

matriz = new char ** [20];

Tienes ahora reservados 20 punteros char **. Para cada uno de ellos, debes hacer un new para la siguiente dimension

for (i=0;i<20;i++)
matriz[i] = new char *[1000];

Ya tienes por cada uno de los 20 punteros iniciales, 1000 punteros. Ahora los news para cada uno de ellos

for (i=0;i<20;i++)
for (j=0;j<1000;j++)
matriz[i][j] = new char [16];

Para liberar, igual pero al revés. Si el compilador te protesta en los new con tanto puntero, define tipos asi

typedef char *fila;
matriz = new fila *[20];

Si no te quieres liar con tanto * y tanto new, haz un unico new asi

char *matriz = new char [10*1000*20*sizeof(char)];

Luego, para acceder al elemento i,j,k tienes que echar una cuenta asi

matriz [i*10+j*1000+k];

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Matriz trimensional con punteros...

Publicado por chuidiang (73 intervenciones) el 01/11/2005 21:04:57
Hola:

la cuenta que te he puesto está un poco mal. Debe ser algo como esto

matriz [i*1000*20 + j*20 + k]

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Matriz trimensional con punteros...

Publicado por FAI (4 intervenciones) el 01/11/2005 23:54:25
Hola, gracias por tu pronta respuesta, pero el problema es que aunque como ves la he dimensionado a 10000, este valor puede ser muy variable, unas veces será 100 y otras pueden ser 500000 porque lee los valores de un fichero de texto.

Lo que buscaba es que fuera algo dinámico, es decir, poder jugar con los valores de la segunda dimensión de la matriz o bien yo pensaba que era posible utilizar punteros sin tener que reservar espacio de memoria.

Perdona si no soy muy claro.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar