Arrays multidimensionales
Un array 2D nativo ocupa memoria contigua por filas en ambos lenguajes.
¿Qué es Arrays multidimensionales?
Un array 2D nativo ocupa memoria contigua por filas en ambos lenguajes.
Recorre una matriz row-major y calcula totales.
Puntos importantes
- Todo puntero debe apuntar a un objeto vivo compatible o ser null.
- Libera exactamente una vez cada allocation propia.
- Expresa ownership y const con claridad.
Ejemplos de código C y C++
main.c
#include <stdio.h>
int main(void) {
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
for (int row = 0; row < 2; ++row) {
int total = 0;
for (int column = 0; column < 3; ++column) total += matrix[row][column];
printf("row %d=%d\n", row, total);
}
return 0;
}
row 0=6
row 1=15
C++
main.cpp
#include <array>
#include <iostream>
int main() {
std::array<std::array<int, 3>, 2> matrix{{{{1, 2, 3}}, {{4, 5, 6}}}};
for (std::size_t row = 0; row < matrix.size(); ++row) {
int total = 0;
for (int value : matrix[row]) total += value;
std::cout << "row " << row << '=' << total << '\n';
}
}
row 0=6
row 1=15
Comparación entre C y C++
Una función C debe conocer todas las dimensiones salvo la primera; std::array conserva dimensiones en el tipo y ofrece at.
C
Ownership y limpieza son convenciones manuales.
C++
Los contenedores y RAII codifican ownership y limpieza en el lifetime.
Ejercicios prácticos
Ejecuta ambas versiones y modifícalas para observar sus garantías.
- Prueba null y fallos de allocation.
- Usa AddressSanitizer y UndefinedBehaviorSanitizer.
- Documenta el ownership de cada puntero.