끄적끄적

반응형

가끔은 아니고 좀 자주 하는 실수가 있다. 일단 예제를 들어보면,


// First source

TCHAR* makefilename(...)

{

TCHAR*       tcFileName;


....  // popluate...


return  tcFileName;

}


Or


// Second source

VOID makefilename(TCHAR** ppFileName)

{

              TCHAR*       tcFileName;


               .........



             *ppFileName = tcFileName;

}


위와 같은 경우이다. 가장 큰 실수는 Local 변수의 return 이다. Local  변수의 경우 함수 return과 함께 사라지게 된다. 즉, 위의 경우에 TCHAR* 로 선언된 point address 는 정리가 되며 이 address 를 넘겨받은 변수 역시 garbage value 를 가지게 되는 것이다.


first source 의 경우에는 compile error 가 나니 쉽게 fix 할 수 있지만, 두 번째의 경우에는 compile 이 되기 때문에 유의해야 한다. 또한, 두번째에서 


*ppFileName = tcFileName

--> memcpy(*ppFileName, tcFileName, string_length);


로 변경해서 사용해야만, string value 를 제대로 return 할 수 있다. 사실 C 에서 string value 를 다루는 함수에서 그 값을 pointer address 로 return 하려면, 그 영역의 공간이 global 하게 선언되어 있던가 아니면 위와 같이 memcpy 를 이용해서 해줘야 한다. 


반응형
Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]