원본 : http://www.gpgstudy.com/forum/viewtopic.php?t=5454
warning C4172: 지역 변수 또는 임시 변수의 주소를 반환하고 있습니다.
대충 코드는 아래와 비슷한 상황입니다.
코드: |
int* Func() { int asdf = 100; return &asdf; } |
제가 생각해도 좀 찜찜해서 고치려고 했는데
막상 테스트 해봐도 값을 반환하는데 문제가 없었습니다.
그래서 더 찜찜했습니다. ㅡㅡ;
단지 포인터가 아니어서 임시변수의 주소를 반환할때 문제가 안생기는걸까요?
정확히 문제가 생길수 있는 상황이 언제인지를 알고싶습니다.
////////////////////////////////////////////////////////////////////////////////////
말 그대로 임시객체라서, 그 포인터가 가리키는 것이 무엇일지 장담할 수 없다는 것이 문제입니다.
정확히 언제 문제가 생길지 알 수 없다는 게 문제입니다
간단한 테스트로는 문제가 드러나지 않을 수 있지만 여러 함수들이 계속 호출되어서 스택이 바뀌면 언젠가는 저 주소에는 다른 어떤 값이 들어가게 될 것입니다
------------------------------------------------------------------------------------
릴리즈나 디버그모드의 차이와는 관계없이, 스택이란 녀석의 동작원리를 알고 있다면 저런 코드가 어떤 문제점을 가지고 있는지를 확인하는것은 그리 어렵지 않습니다.
코드: |
#include <stdio.h> int* Func1() { int asdf = 100; return & asdf; } int* Func2() { int asdf = 101; return & asdf; } int main( int c, char *v[] ) { int *a1, *a2; a1 = Func1(); a2 = Func2(); printf( "0x%08x, 0x%08x, %d, %d\n", a1, a2, *a1, *a2 ); } |
[출처] [GpgStudy] 임시객체의 주소
'Programming > C/C++/CS' 카테고리의 다른 글
파일 병합 프로그램 (2) | 2013.07.28 |
---|---|
[0,n) 사이의 부동소수점 수 난수 구하기 (0) | 2013.01.30 |
sublime text2에서 c, c++ 코드 작성 후 컴파일 하기 (1) | 2013.01.29 |
헤더 파일이 서로 참조 될 때 (0) | 2013.01.29 |