Menu
Coddy logo textTech

널 포인터

Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 4번째.

포인터를 선언할 때, 그것이 자동으로 의미 있는 무언가를 가리키지는 않습니다. 초기화되지 않은 포인터는 무작위 메모리 주소를 포함하고 있으며, 이를 사용하려고 하면 심각한 오류가 발생할 수 있습니다. 이것이 바로 안전한 프로그래밍을 위해 널 포인터(null pointers)가 필수적인 이유입니다.

널 포인터(null pointer)는 명시적으로 아무것도 가리키지 않는 포인터입니다. 현대적인 C++에서는 nullptr로 초기화하여 널 포인터를 생성합니다:

int* ptr = nullptr;  // ptr은 이제 널 포인터입니다

nullptr 키워드는 포인터가 유효한 메모리 위치를 가리키고 있지 않음을 나타냅니다. 이는 포인터를 초기화하지 않은 상태로 두는 것보다 훨씬 안전합니다. 포인터를 역참조하기 전에 포인터가 null인지 확인할 수 있기 때문입니다.

포인터를 사용하기 전에, 간단한 if 문을 사용하여 해당 포인터가 null이 아닌지 확인해야 합니다:

if (ptr != nullptr) {
    // 여기서 *ptr을 안전하게 사용할 수 있습니다
    int value = *ptr;
}

이 관행은 유효하지 않은 메모리 위치에 접근하여 프로그램이 충돌하는 것을 방지합니다. 포인터를 선언할 때 항상 nullptr로 초기화하고, 역참조하기 전에 null 여부를 확인하세요.

challenge icon

챌린지

쉬움

역참조하기 전에 null 포인터를 확인하여 안전한 포인터 사용을 보여주는 프로그램을 작성하세요.

다음과 같은 입력이 제공됩니다:

  • "valid" 또는 "null" 중 하나인 문자열

프로그램은 다음을 수행해야 합니다:

  1. data라는 이름의 정수 변수를 선언하고 42로 초기화합니다.
  2. ptr이라는 이름의 포인터를 선언합니다.
  3. 입력이 "valid"인 경우, data의 주소를 ptr에 할당합니다.
  4. 입력이 "null"인 경우, nullptrptr에 할당합니다.
  5. if문을 사용하여 ptr을 사용하기 전에 null이 아닌지 확인합니다.
  6. 포인터가 null이 아니면, 포인터가 가리키는 값을 출력합니다.
  7. 포인터가 null이면, 안전 메시지를 출력합니다.

다음과 같은 정확한 출력 형식을 사용하세요:

Value: [value]

null 포인터의 경우, 다음 형식을 사용하세요:

Pointer is null - cannot dereference

치트 시트

정의되지 않은 동작을 방지하기 위해 포인터를 nullptr로 초기화하세요:

int* ptr = nullptr;  // ptr은 이제 null 포인터입니다

역참조하기 전에 항상 포인터가 null이 아닌지 확인하세요:

if (ptr != nullptr) {
    // 여기서 *ptr을 안전하게 사용할 수 있습니다
    int value = *ptr;
}

nullptr 키워드는 포인터가 유효한 메모리 위치를 가리키고 있지 않음을 명시적으로 나타내어, 코드를 더 안전하게 만들고 잘못된 메모리 접근으로 인한 충돌을 방지합니다.

직접 해보기

#include <iostream>
#include <string>
using namespace std;

int main() {
    // 입력 읽기
    string input;
    cin >> input;
    
    // data 변수 선언
    int data = 42;
    
    // TODO: 여기에 코드를 작성하세요
    // - ptr이라는 이름의 포인터 선언
    // - 입력을 확인하고 ptr에 적절한 값 할당
    // - if문을 사용하여 포인터를 안전하게 확인하고 사용
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직과 흐름의 모든 레슨