2012-03-05 3 views
1

구조체의 메모리 위치가 정수로 저장되어 있습니다. 해당 위치에 저장된 구조체를 검색하고 해당 위치의 객체에 대한 포인터를 만들려면 어떻게해야합니까? 포인터 대신 int의 사용특정 메모리 위치에서 구조체를 가져 오는 방법은 무엇입니까?

Structure object; 
int memLocation = &object; 

Structure objectCopy = (objectAtLocation) memLocation; 
Structure *objectPointer = (pointerToLocation) memLocation; 
+0

포인터에'int' 캐스트 그래서 적절한 않은 캐스트는 기본적 라인 3입니다. –

답변

6

그래서 당신이 무슨 일을하는지 나쁜 경우에도 K &의 첫 번째 버전 R. 다시가는, 아주 나쁜 형태입니다. 그러나 선택의 여지가 없다고 가정하면 ...

ObjectStructure 인 경우 &objectStructure *입니다.

Structure *objectPointer = (Structure *) memLocation; 
+1

+1. 정수와 포인터 사이의 변환을 위해서는 항상'intptr_t' 또는'uintptr_t'를 사용하십시오. –

+0

나는 보통 포인터를 사용해야한다는 것을 알고 있지만 수동으로 바이트 단위로 위치를 제어 할 수 있어야합니다. –

+0

실제 프로그램에서 라인 3이 어떻게 보이나요? –

2
int memLocation = (int)&object; 

Structure *objectPointer = (Structure *) memLocation; 
Structure object; 
memcpy(&object, (void*)memlocation, sizeof(Structure)); 
+0

2 번 줄을 사용하면 Xcode에 오류가 발생합니다. –

+0

흠 ... 그냥 10.6으로 맥 미니에 노력 - gcc는 아무 말도하지 않았다. 미리'(void *) '에 캐스트 해보세요. –

+0

'memLocation'이 이미 유효한 객체를 가리킨다면 memcpy를 사용할 필요가 없습니다. '* (구조 *) memlocation'이 좋습니다. – Dave

0

보통은 주조입니다 :

Structure *object = (Structure *)memLocation; 
0
Structure *objectPointer = (Structure *)memLocation; 
Structure ObjectCopy = *objectPointer; 
관련 문제