더북(TheBook)

이 구형 인터페이스를 사용하면 배열의 크기가 일치하는지 테스트할 수 없다. 슬프게도 크기 정보를 함수 인수로 전달하는 인터페이스가 있는 C 및 Fortran 라이브러리를 오늘날에도 여전히 구현하고 있다. 사소한 사용자 실수로 충돌이 발생하고 충돌 원인을 추적하는 데 엄청난 노력이 필요할 수 있다. 이런 이유로, 이 책에서는 사용하기 쉽고 실수를 덜 범하는 사용자 정의 수학 소프트웨어를 어떻게 만들 수 있는지를 보여준다. 다행히 미래의 C++ 표준은 더 고수준의 수학, 특히 선형 대수학 라이브러리를 제공할 것이다.

 

배열에는 두 가지 단점이 있다.

배열에 접근하기 전에 인덱스를 검사하지 않기 때문에 배열 외부에 접근한다는 사실을 알게 되고 이로 인해 세그먼트 오류/위반으로 프로그램에 크래시가 발생한다. 하지만 이 경우는 최악의 경우가 아니다. 왜냐하면 적어도 뭔가 잘못되었다는 것을 알 수 있기 때문이다. 잘못된 접근 또한 우리의 데이터를 망칠 수 있다. 프로그램은 정상적으로 실행되지만 상상할 수 있는 결과와는 달리 완전히 잘못된 결과를 산출한다. 프로그램 코드를 덮어 쓸 수도 있다. 그런 다음 데이터는 말도 안 되는 기계 동작으로 해석한다.

배열의 크기는 컴파일 타임에 알고 있어야 한다.* 예를 들어 파일에 저장되어 있는 배열을 메모리로 다시 읽어야 한다.

ifstream ifs("some_array.dat");
ifs >> size;
float v[size];       // 오류: 컴파일 타임에 크기를 알지 못한다.

컴파일하는 동안 크기를 알아야 하기 때문에 이 코드는 동작하지 않는다.

첫 번째 문제는 새로운 배열 타입으로, 두 번째 문제는 동적 할당으로만 해결할 수 있다. 두 문제를 해결하기 위해 포인터가 등장한다.

 

* 일부 컴파일러는 런타임 값을 배열 크기로 지원한다. 다른 컴파일러에서는 보장하지 않기 때문에 휴대용 소프트웨어에서는 이를 피해야 한다. 이 기능은 C++14 표준으로 고려되었지만 미묘한 부분들이 완전히 밝혀지지 않았기 때문에 연기되었다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.