warning: function returns address of local variable
글쓴이: lemonday / 작성시간: 수, 2003/07/09 - 4:31오후
다음과 같은 코드로 실행을 해보니
char *kkk(char *mm)
{
char abc[100];
strncpy(abc,mm,100);
return abc;
}
int main()
{
char *mm = "abc";
printf("%s\n",kkk(char*)mm));
return 0;
}
함수 kk에서 return abc 에 warning: function returns address of local variable
이런 warning이 뜨내요.
또한 출력문 역시 원치 않는 값이 출력됩니다.
이유를 알고 싶습니다.
Forums:
안녕하세요?kkk 함수 내에 선언된 abc[] 변수는 Local
안녕하세요?
kkk 함수 내에 선언된 abc[] 변수는 Local Variable입니다.
즉, 스택에 선언되므로 함수 내에서만, 또는 서브 함수 내에서만 유효합니다.
따라서 리턴되면 스택이 Pop되므로, abc의 내용이 다른 요소에 의해 Overwrite될 수 있습니다.
해결책은 malloc과 같은 메모리 할당 프로그램을 이용해서 Heap에 메모리를 할당하거나, static이나 extern 변수를 쓰시면 됩니다.
그럼...
음, 제가 쓰는 사이 다른 분이 이미 답변을 해주셨네요. 8) 한
음, 제가 쓰는 사이 다른 분이 이미 답변을 해주셨네요. 8)
한가지 중요한 것은 이 문제를 피하기 위해 전역 변수를 쓰는 것은 대부분의 경우 안좋은 프로그래밍 습관이란 점입니다. 가능한한 동적 할당으로 해결하는 것이 좋습니다.
제 경우에...
저는 위와 같은 경우에 processing한 결과 문자열을 strdup 함수를 써서
문자열을 새로운 공간에 할당한 후 그 포인터를 리턴해서 사용하고
나중에 사용이 끝나면 free()로 해제 시킴니다.
추신) 제 방법이 맞는 건가요? ^^:
Re: 제 경우에...
이 방법은 별로 좋은 방법은 아닙니다.
메모리를 잡고 해제하는 것은 같은 루틴 안해서 하는 것이 좋습니다.
그래야 코드가 좀 더 깔금해 지고 나중에 수정도 쉽습니다.
저같으면 꼭 이렇게 써야 하는 경우라면 그냥 static 으로 잡아 쓰겠습니다.
일반적으로는 이런 경우 인자로 버퍼도 같이 넘겨 주는 것이 좋습니다.
댓글 달기