Menu
Coddy logo textTech

널 포인터

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

포인터를 선언한다고 해서 자동으로 의미 있는 대상을 가리키는 것은 아닙니다. 초기화되지 않은 pointer에는 임의의 메모리 주소가 들어 있으며, 이를 사용하려고 하면 심각한 오류가 발생할 수 있습니다. 이때 null 포인터는 안전한 프로그래밍을 위해 필수적입니다.

null pointer는 아무것도 명시적으로 가리키지 않는 pointer입니다. 최신 C++에서는 nullptr로 초기화하여 null pointer를 생성합니다:

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

nullptr 키워드는 pointer가 어떤 valid 메모리 위치도 가리키고 있지 않음을 나타냅니다. 초기화되지 않은 pointer를 그대로 두는 것보다 훨씬 안전한데, pointer를 dereference하려고 하기 전에 pointer가 null인지 확인할 수 있기 때문입니다.

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

if (ptr != nullptr) {
    // 여기서 *ptr을 사용해도 안전합니다
    int value = *ptr;
}

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

challenge icon

챌린지

쉬움

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

다음 input이 제공됩니다:

  • "valid" 또는 "null" 중 하나인 string

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

  1. 정수 variable을 Declare하고 이름을 data로 지정한 후 값 42로 초기화합니다
  2. ptr이라는 이름의 pointer를 Declare합니다
  3. input이 "valid"이면 data의 주소를 ptr에 assign합니다
  4. input이 "null"이면 nullptrptr에 assign합니다
  5. 사용을 시도하기 전에 ptr이 null이 아닌지 확인하기 위해 if-statement를 사용합니다
  6. pointer가 null이 아니면 pointer가 가리키는 값을 출력합니다
  7. pointer가 null이면 안전성 메시지를 출력합니다

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

Value: [value]

null pointer에는 다음 형식을 사용하세요:

Pointer is null - cannot dereference

직접 해보기

#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실력 점검

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

로직과 흐름의 모든 레슨

직접 연습해 보세요: 온라인 C++ 컴파일러