본문 바로가기

프로그래밍./C언어.

[C언어] 간단하지만 순간 착각 하는 코드. [warning C4172]

리눅스에서의 경고 메시지
function returns address of local variable [enabled by default]

윈도우에서의 경고 메시지
warning C4172: returning address of local variable or temporary 

 
얼필 보면 별 문제 없어 보이는 코드...

함수의 문제도.. 반환형의 문제도..
반환 받는 놈의 타입도 문제 없다.

주소를 넘겨주고 주소를 받았는데 말이지 - -;

물론, 해결하는 방법은 여러가지 이다.
중요한건 왜? 이게 문제가 되느냐 이지. 문제가 되는 이유이다.

정말 좀 어처구니가 없었는데. 문제가 없을거 같지만 자세히 보면.

getname() 함수에서 name[128]이라는 배열을 선언해서 사용하고 있다.
그리고는 그 name의 주소를 반환하고 있다.

문제는.. name은 지역변수 라는 것이다.
사실상 getname()이 끝나면 name도 소멸되는데

소멸된 주소를 넘겨 받아서 어쩔셈인가?

즉, 없는 주소를 넘겨 받게 되는 것.



static을 이용해서 계속 유지시켜주거나,
동적메모리를 이용하거나,
혹은 name을 main에서 만들고 getname()으로 넘겨주고 처리를 하거나.
 
하는 방법으로 해결할 수 있다.

유용한 정보가 되셨다면 아래 손가락 버튼 한번 눌러주세요 ^-^