[완료] 64비트 인텔 cpu에서 포인터를 리턴하는 경우 문제 (민망..-0-)
글쓴이: lee3390 / 작성시간: 목, 2007/03/29 - 8:51오후
64비트 환경에서 프로그램을 짜고 있습니다.
근데 어떤 함수에서 포인터를 리턴하는데 그 리턴값을 한 파일 안에서 받는거면 상관이 없는데
파일이 나누어져 있으면 주소값이 4바이트만 리턴되어 오류가 납니다.
void* func() { Node* p; ... return p; } main() { Node* node; ... node = (Node*)func(); print("%s\n", node->value); }
위와 같이 한 파일안에서 함수를 호출하면 문제가 없지만 func함수가 들어가있는 부분을 라이브러리로 만들어 링크시켜서 컴파일을 하면
warning: cast to pointer from integer of different size
이런 메세지가 뜨고 실행하면 세그먼트폴트가 납니다.
main() { Node* node; ... node = (Node*)func(); print("%s\n", node->value); } gcc -O2 -g -o test t.c -L./ -lfunc
컴파일은 위와 같이 했고, gdb로 디버깅 해보니
리턴하기 전 주소값이 0xaabbccddeeff 였다면, main에서의 node값은 0xbbccddeeff로 나옵니다.
앞의 aa가 짤려서 4바이트만 입력되었습니다. 혹시나해서 포인터 사이즈를 출력해봤는데 둘다 8바이트로 나오고요..
포인터를 리턴 받아서 쓸려면 어떻게 해야할까요.. ㅠ.ㅠ
Forums:
main쪽에 void* func();
main쪽에
void* func();
이렇게 프로토타이핑을 해주셔야죠... -_-;;;
켁...
-_-;; 그게 빠졌... 군요..
아... 어이없는 실수를...
감사합니다 T_T;
댓글 달기