경고: C++에서 포인터에서 다른 크기의 정수로 캐스트
Naila Saad Siddiqui
2024년2월15일
이 빠른 문서는 C++에서 포인터에서 다른 크기의 정수로 캐스트
경고에 대한 솔루션에 대한 것입니다. 경고는 종종 다른 컴파일러에서 오류로 표시됩니다.
경고: C++에서 포인터에서 다른 크기의 정수로 캐스트
컴파일러는 코드에 문제가 있음을 프로그래머에게 알리기 위해 경고 및 오류를 발생시킵니다. 오류는 코드 실행을 금지하고 경고는 코드 실행을 허용하지만 때때로 이 실행으로 인해 일부 메모리 처리 문제가 발생할 수 있습니다.
따라서 코드를 실행하기 전에 모든 경고 및 오류로부터 코드를 정리하는 것이 좋습니다.
아래 코드와 같이 정수 값을 포인터 변수에 저장하려고 하면 포인터에서 크기가 다른 정수로 캐스트
라는 경고가 발생합니다.
int var = 897;
int* ptr;
ptr = var; // this conversion is wrong
위의 코드는 컴파일러 유형에 따라 경고 또는 오류를 생성합니다.
출력:
이러한 유형의 변환은 몇 가지 이유로 잘못되었습니다.
-
ptr
은 주소를 저장하기 위한 포인터형 변수입니다. 즉, 일부 메모리 위치를 가리킬 수 있으며 해당 메모리 위치에 일부 값이 저장될 수 있습니다.따라서
int
형 데이터를 자체적으로 저장할 수 없습니다. 값이 아닌 이 포인터 변수에var
의 주소를 저장할 수 있습니다. -
둘째, 두 변수의 크기가 다르기 때문에 이 변환 시 데이터 손실의 가능성이 있습니다.
이 오류를 해결하기 위해 다음을 수행할 수 있습니다.
int main() {
int var = 897;
int* ptr;
ptr = &var;
cout << "ptr contains: " << *ptr << endl;
cout << "var contains: " << var << endl;
}
그러면 다음과 같은 결과가 나타납니다.