elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 22:24  


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Expandir matriz dinámica?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Expandir matriz dinámica?  (Leído 483 veces)
Metal-byte

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Expandir matriz dinámica?
« en: 22 Enero 2012, 15:11 »

El asunto es este. Estoy creando una matriz dinámica de 3 de ancho (fijo) por n filas de alto con la función calloc.

Mi consulta es como quitarle o agregarle filas a esa matriz en tiempo de ejecución. Tengo entendido que puedo hacerlo mediante la función realloc, pero no entiendo como funcionaría en este caso (La he probado solo en arrays dinámicos, pero nunca en matrices :/)

Saludos.


En línea
Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Expandir matriz dinámica?
« Respuesta #1 en: 22 Enero 2012, 18:29 »

Imagino que la matriz dinámica la crearás de un modo similar a:

Código
int **matriz
 
matriz=(int **) calloc(num_filas,sizeof(int*));
 
for(i=0;i<num_filas;i++){
   matriz[i]=(int *) calloc(3,sizeof(int));
 
 

Para modificar el numero de filas:

Código
 
matriz= (int **) realloc(matriz,num_fila_nuevo*sizeof(int*));
 
if(num_fila_nuevo> num_fila){ //tendremos que añadir columnas si hemos ampliado el numero de filas
 
   for(i=num_fila;i<num_fila_nuevo;i++){
       matriz[i]=(int *) calloc(3,sizeof(int));
   }
 
}
num_fila=num_fila_nuevo
 



En línea

rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: Expandir matriz dinámica?
« Respuesta #2 en: 22 Enero 2012, 23:06 »

Mi consulta es como quitarle o agregarle filas a esa matriz en tiempo de ejecución. Tengo entendido que puedo hacerlo mediante la función realloc, pero no entiendo como funcionaría en este caso (La he probado solo en arrays dinámicos, pero nunca en matrices :/)
Si se reserva la memoria en la forma usual solo tienes que seguir la explicación de Akai teniendo cuidado de, si el numero de filas se reduce, primero liberar esas filas.

Si como indicas el numero de columnas por fila es fijo puedes utilizar un puntero a array y reservar todo el bloque mediante malloc/realloc sin tener que preocuparte por reservas individuales.

Un programa de ejemplo en C sobre esto ultimo (sin validación de errores para acortar):
Código
#include <stdio.h>
#include <stdlib.h>
 
#define NUM_FILAS  6
#define NUM_COLS   3
 
int main(void)
{
  int (*p)[NUM_COLS];
  int num_filas = NUM_FILAS;
  int i;
  int j;
 
  /* Reserva y asignacion */
  p = malloc(num_filas * sizeof *p);
  for (i = 0; i < num_filas; i++)
     for (j = 0; j < NUM_COLS; j++)
        p[i][j] = 10 * i + j;
 
  /* Impresion */
  for (i = 0; i < num_filas; i++){
     for (j = 0; j < NUM_COLS; j++)
        printf("%3d", p[i][j]);
 
     putchar('\n');
  }
 
  puts("---------");
 
  /* Reajuste (Capacidad a la mitad) */
  num_filas /= 2;
  p = realloc(p, num_filas * sizeof *p);
 
  /* Impresion */
  for (i = 0; i < num_filas; i++){
     for (j = 0; j < NUM_COLS; j++)
        printf("%3d", p[i][j]);
 
     putchar('\n');
  }
 
  free(p);
 
  return EXIT_SUCCESS;
}

Un detalle: si la función realloc falla esta retorna NULL y el puntero pasado como primer argumento continua siendo valido. Hay que considerar eso cuando se agrega validación de errores.

Un saludo
En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como crear una matriz dinamica en C.
Programación C/C++
80_andres_80 3 13,427 Último mensaje 2 Noviembre 2008, 17:29
por Spider-Net
Matriz dinamica en c++ [Solucionado]
Programación C/C++
wargamian 2 2,505 Último mensaje 5 Enero 2010, 17:06
por Saint Iker
[Solucionado]Problemilla al acceder a una matriz dinamica
Programación C/C++
yiti007 2 1,018 Último mensaje 8 Mayo 2010, 19:10
por Leo Gutiérrez.
lista con matriz dinamica
Programación C/C++
L·Storm! 2 1,179 Último mensaje 3 Agosto 2011, 03:03
por L·Storm!
Memoria dinamica matriz
Programación C/C++
programacion_c 1 178 Último mensaje 25 Abril 2012, 00:23
por david_BS
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines