Puntatori e memoria

Array multidimensionali

Un array 2D built-in è contiguo per righe in entrambi i linguaggi.

Che cos’è Array multidimensionali?

Un array 2D built-in è contiguo per righe in entrambi i linguaggi.

Scorri una matrice row-major e calcola i totali.

Punti importanti

  • Ogni puntatore deve riferirsi a un oggetto vivo compatibile o essere null.
  • Ogni allocation posseduta va liberata una sola volta.
  • Esprimi chiaramente ownership e const.

Esempi di codice C e C++

C
Esegui →
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;
}
Output previsto
row 0=6
row 1=15
C++
Esegui →
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';
    }
}
Output previsto
row 0=6
row 1=15

Confronto tra C e C++

Una funzione C deve conoscere tutte le dimensioni tranne la prima; std::array le conserva nel tipo e offre at.

C

Ownership e cleanup sono convenzioni manuali.

C++

Container e RAII codificano ownership e cleanup nel lifetime.

Esercizi pratici

Esegui entrambe le versioni e modificale per osservare le diverse garanzie.

  • Testa null e fallimenti di allocation.
  • Usa AddressSanitizer e UndefinedBehaviorSanitizer.
  • Documenta ownership di ogni puntatore.