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):
#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++)
}
/* 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++)
}
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