널 포인터
Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨. 56개 중 4번째.
pointer를 선언한다고 해서 자동으로 의미 있는 대상을 가리키는 것은 아닙니다. 초기화되지 않은 pointer에는 임의의 메모리 주소가 들어 있으며, 이를 사용하려고 하면 심각한 오류가 발생할 수 있습니다. 이때 null pointer가 안전한 프로그래밍을 위해 필수적입니다.
A null pointer는 아무것도 가리키지 않는 pointer입니다. 최신 C++에서는 nullptr로 초기화하여 null pointer를 만듭니다:
int* ptr = nullptr; // ptr은 이제 널 포인터입니다nullptr 키워드는 포인터가 유효한 메모리 위치를 가리키고 있지 않음을 나타냅니다. 포인터를 초기화하지 않은 상태로 두는 것보다 훨씬 안전한데, 포인터를 역참조하려고 시도하기 전에 포인터가 null인지 확인할 수 있기 때문입니다.
포인터를 사용하기 전에 간단한 if-문을 사용하여 null이 아닌지 확인해야 합니다:
if (ptr != nullptr) {
// 여기서 *ptr을 사용해도 안전합니다
int value = *ptr;
}이 연습은 유효하지 않은 메모리 위치에 액세스하여 프로그램이 충돌하는 것을 방지합니다. pointer를 선언할 때는 항상 nullptr로 초기화하고, dereference하기 전에 null인지 확인하세요.
챌린지
쉬움null 포인터를 역참조하기 전에 확인하여 안전한 포인터 사용을 보여 주는 프로그램을 작성하세요.
다음 입력이 제공됩니다:
"valid"또는"null"중 하나인 string
프로그램은 다음을 수행해야 합니다:
data라는 이름의 정수 variable을 Declare하고 값42로 초기화합니다.ptr이라는 이름의 pointer를 Declare합니다.- 입력이
"valid"이면data의 주소를ptr에 assign합니다. - 입력이
"null"이면nullptr를ptr에 assign합니다. - 사용을 시도하기 전에
ptr이 null이 아닌지 확인하기 위해 if-statement를 사용합니다. - pointer가 null이 아니면 pointer가 가리키는 값을 출력합니다.
- 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;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직과 흐름의 모든 레슨
직접 연습해 보세요: 온라인 C++ 컴파일러