[완료] 64비트 인텔 cpu에서 포인터를 리턴하는 경우 문제 (민망..-0-)

lee3390의 이미지

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바이트로 나오고요..

포인터를 리턴 받아서 쓸려면 어떻게 해야할까요.. ㅠ.ㅠ

익명사용자의 이미지

main쪽에
void* func();
이렇게 프로토타이핑을 해주셔야죠... -_-;;;

lee3390의 이미지

-_-;; 그게 빠졌... 군요..

아... 어이없는 실수를...

감사합니다 T_T;