포인터와 메모리

다차원 배열

내장 2D array는 두 언어 모두 행 단위 연속 메모리입니다.

다차원 배열이란?

내장 2D array는 두 언어 모두 행 단위 연속 메모리입니다.

Row-major matrix를 순회하고 행 합계를 계산합니다.

중요한 점

  • 포인터는 살아 있는 호환 객체를 가리키거나 null이어야 합니다.
  • 소유한 allocation은 정확히 한 번 해제하세요.
  • Ownership과 const를 명확히 표현하세요.

C와 C++ 코드 예제

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

C와 C++ 비교

C 함수는 첫 dimension 외 크기를 알아야 합니다. std::array는 dimension을 type에 보존하고 at도 제공합니다.

C

Ownership과 cleanup은 개발자가 지켜야 하는 규칙입니다.

C++

Container와 RAII가 ownership과 cleanup을 lifetime에 연결합니다.

연습 문제

두 버전을 실행하고 수정하여 각 언어의 보장을 관찰하세요.

  • null과 할당 실패를 테스트하세요.
  • AddressSanitizer와 UndefinedBehaviorSanitizer를 실행하세요.
  • 각 pointer의 ownership을 문서화하세요.