728x90
C언어에서 포인터는 메모리 주소를 저장하는 변수이며, 일반적인 정수형 변수와는 다르게 다루어야 합니다. 이 오류는 정수 값을 직접 포인터에 대입하려고 할 때 발생합니다. 즉, 포인터는 주소를 저장해야 하는데, 단순한 정수 값을 대입하면 타입이 일치하지 않아 오류가 발생하는 것입니다.
컴파일러는 정수와 포인터 간 대입이 안전하지 않다고 판단하며, 암묵적 형변환 없이 이 둘을 직접 연결하는 것을 허용하지 않습니다. 일반적으로 변수의 주소를 포인터에 저장하거나, 동적 메모리 할당 결과를 저장하는 방식으로 사용해야 합니다.
● 오류 예제
#include <stdio.h>
int main() {
int *ptr;
ptr = 100; // 오류 발생: 정수를 포인터에 대입
printf("%p\n", ptr);
return 0;
}
위 코드에서 100은 단순한 정수값으로, 메모리 주소가 아닙니다. 컴파일러는 이 구문을 다음과 같이 해석하여 오류를 출력합니다.
error: assignment makes pointer from integer without a cast
● 해결 방법
포인터에는 유효한 메모리 주소를 대입해야 합니다. 보통 변수의 주소를 & 연산자를 통해 얻거나 malloc 등의 메모리 할당 함수 결과를 대입합니다.
#include <stdio.h>
int main() {
int num = 42;
int *ptr = # // 주소를 대입
printf("%d\n", *ptr);
return 0;
}
출력 결과는 다음과 같습니다.
42
● 실전 팁
- 포인터는 메모리 주소를 저장하는 변수이므로, 정수를 그대로 대입하지 않도록 주의하세요.
- 주소가 필요한 경우에는 반드시 변수에 & 연산자를 사용하거나 메모리 할당 함수를 통해 주소를 확보해야 합니다.
- 포인터와 정수를 혼동하면 프로그램의 안정성이 크게 떨어질 수 있으므로, 변수 타입을 명확히 구분하세요.
포인터와 정수는 서로 다른 용도를 가진 타입이며, 안전한 프로그래밍을 위해 두 타입 간의 직접적인 대입은 반드시 피해야 합니다. 타입 오류는 단순히 경고가 아니라 프로그램이 비정상적으로 동작할 수 있는 위험 요인이므로, 항상 주의 깊게 다루어야 합니다.
728x90