경고: C++에서 포인터에서 다른 크기의 정수로 캐스트

Naila Saad Siddiqui 2024년2월15일
경고: C++에서 포인터에서 다른 크기의 정수로 캐스트

이 빠른 문서는 C++에서 포인터에서 다른 크기의 정수로 캐스트 경고에 대한 솔루션에 대한 것입니다. 경고는 종종 다른 컴파일러에서 오류로 표시됩니다.

경고: C++에서 포인터에서 다른 크기의 정수로 캐스트

컴파일러는 코드에 문제가 있음을 프로그래머에게 알리기 위해 경고 및 오류를 발생시킵니다. 오류는 코드 실행을 금지하고 경고는 코드 실행을 허용하지만 때때로 이 실행으로 인해 일부 메모리 처리 문제가 발생할 수 있습니다.

따라서 코드를 실행하기 전에 모든 경고 및 오류로부터 코드를 정리하는 것이 좋습니다.

아래 코드와 같이 정수 값을 포인터 변수에 저장하려고 하면 포인터에서 크기가 다른 정수로 캐스트라는 경고가 발생합니다.

int var = 897;
int* ptr;

ptr = var;  // this conversion is wrong

위의 코드는 컴파일러 유형에 따라 경고 또는 오류를 생성합니다.

출력:

경고 표시

이러한 유형의 변환은 몇 가지 이유로 잘못되었습니다.

  1. ptr은 주소를 저장하기 위한 포인터형 변수입니다. 즉, 일부 메모리 위치를 가리킬 수 있으며 해당 메모리 위치에 일부 값이 저장될 수 있습니다.

    따라서 int형 데이터를 자체적으로 저장할 수 없습니다. 값이 아닌 이 포인터 변수에 var의 주소를 저장할 수 있습니다.

  2. 둘째, 두 변수의 크기가 다르기 때문에 이 변환 시 데이터 손실의 가능성이 있습니다.

이 오류를 해결하기 위해 다음을 수행할 수 있습니다.

int main() {
  int var = 897;
  int* ptr;

  ptr = &var;
  cout << "ptr contains: " << *ptr << endl;
  cout << "var contains: " << var << endl;
}

그러면 다음과 같은 결과가 나타납니다.

오류 해결 방법