Gestión Dinámica de Matrices en C++: Reserva, Validación y Liberación de Memoria

Informática y Telecomunicaciones3,85 KB

#include "Funciones.h"
#include "MemoryManager.h"


Construcción de una matriz dinámica de flotantes

float** ConstruirMatriz(int nFilas, int nColumnas) {
float** matriz; // Señala a una matriz.
int i, j;
matriz = new float* [nFilas]; // Reservando memoria para las filas.
if (matriz == NULL) { // Comprobar si hay algún error al crear la matriz
std::cout << "\n Error!!";
}
for (i = 0; i < nFilas; i++) {
matriz[i] = new float[nColumnas]; // Reservando memoria para las columnas.
if (matriz == NULL) {
std::cout << "\n Error!!!";
}
}
for (i = 0; i < nFilas; i++) { // Inicializar la matriz a cero
for (j = 0; j < nColumnas; j++) {
matriz[i][j] = 0;
}
}
return matriz;
}

Introducción de datos en la matriz

void IntroducirDatos(MatFloat* pDestino) {
int i, j;
float dato;
bool fallo = false;
for (i = 0; i < pDestino->nFilas; i++) { // Recorrer la matriz para introducir valores
for (j = 0; j < pDestino->nColumnas; j++) {
do {
std::cout << "\nIntroducir dato de la matriz, Fila " << i + 1 << " Columna " << j + 1 << ": ";
std::cin >> dato;
fallo = LeerDato(); // Permite comprobar el tipo de la variable introducida
} while (fallo);
pDestino->pMatrizF[i][j] = dato;
}
}
}

Visualización de la matriz

void Mostrar(MatFloat mOrigen) {
int i, j;
std::cout << "\n";
for (i = 0; i < mOrigen.nFilas; i++) { // Recorre la matriz para mostrar por pantalla
for (j = 0; j < mOrigen.nColumnas; j++) {
std::cout << mOrigen.pMatrizF[i][j] << " ";
}
std::cout << "\n";
}
}

Liberación de memoria de la matriz

void Destruir(MatFloat* pMatFloat) {
int i;
for (i = 0; i < pMatFloat->nFilas; i++) {
delete[] pMatFloat->pMatrizF[i]; // Borra la memoria reservada de columnas
}
delete[] pMatFloat->pMatrizF; // Borra la memoria reservada para las filas
pMatFloat->pMatrizF = NULL; // Indicar que la matriz no existe
std::cout << "Matriz destruida\n";
}

Validación del tipo de dato introducido

bool LeerDato() {
bool fallo;
fallo = std::cin.fail(); // Comprobar si la variable es del tipo introducido
if (fallo) {
std::cout << "Error: dato no válido!\n";
std::cin.clear(); // Borrar el bit de error
std::cin.ignore(std::numeric_limits::max(), '\n'); // Limpiar el buffer de entrada
}
return fallo;
}


Cabeceras y declaraciones

#include
#include // Librería de new y delete.
#include
#include
#include "MemoryManager.h"
float** ConstruirMatriz(int nFilas, int nColumnas); // Función para construir la matriz.

Estructura MatFloat

struct MatFloat { // Estructura
int nFilas; // Número de filas
int nColumnas; // Número de columnas
float** pMatrizF; // Datos de la matriz
};
void IntroducirDatos(MatFloat* pDestino); // Función para introducir valores en la matriz
void Mostrar(MatFloat mOrigen); // Función para mostrar la matriz por pantalla
void Destruir(MatFloat* pMatFloat); // Función para eliminar la matriz
bool LeerDato(); // Función para comprobar que el dato introducido es del tipo solicitado
int main(); // Main

Descargar

PDF Word HTML