본문 바로가기
프로그래밍언어/C언어[Error]

[C언어][Error] 014. assignment makes pointer from integer without a cast – 정수를 포인터에 대입함

by about_IT 2025. 4. 24.
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 = &num;  // 주소를 대입
    printf("%d\n", *ptr);
    return 0;
}

출력 결과는 다음과 같습니다.

42

 


● 실전 팁

  • 포인터는 메모리 주소를 저장하는 변수이므로, 정수를 그대로 대입하지 않도록 주의하세요.
  • 주소가 필요한 경우에는 반드시 변수에 & 연산자를 사용하거나 메모리 할당 함수를 통해 주소를 확보해야 합니다.
  • 포인터와 정수를 혼동하면 프로그램의 안정성이 크게 떨어질 수 있으므로, 변수 타입을 명확히 구분하세요.

 

포인터와 정수는 서로 다른 용도를 가진 타입이며, 안전한 프로그래밍을 위해 두 타입 간의 직접적인 대입은 반드시 피해야 합니다. 타입 오류는 단순히 경고가 아니라 프로그램이 비정상적으로 동작할 수 있는 위험 요인이므로, 항상 주의 깊게 다루어야 합니다.

728x90