다음 형식을 가진 C++ 구조체 (윈도우에서)를 읽으려고합니다.포인터에서 큐빅 구조 읽기
typedef struct __cudaFatCudaBinaryRec {
unsigned long magic;
unsigned long version;
unsigned long gpuInfoVersion;
char* key;
char* ident;
char* usageMode;
__cudaFatPtxEntry *ptx;
__cudaFatCubinEntry *cubin;
__cudaFatDebugEntry *debug;
void* debugInfo;
unsigned int flags;
__cudaFatSymbol *exported;
__cudaFatSymbol *imported;
struct __cudaFatCudaBinaryRec *dependends;
unsigned int characteristic;
__cudaFatElfEntry *elf;
} __cudaFatCudaBinary;
이 구조체 (void * ptr)에 대한 포인터가 있습니다.
이제 읽고 싶습니다. 이 구조의 내용
__cudaFatCudaBinary *ptr2=(cudaFatCudaBinary*)ptr;
cout<<ptr->magic;//This works fine
cout<<ptr->key;//This crashes my program..bad pointer results..why?
위의 내용은 포인터가 아닌 모든 포인터 구성원과 일치합니다. 내가 뭘 잘못하고 있죠?
추가 :
문제를 자세히 설명하겠습니다. 예, "key"가 가리키는 주소는 NULL이므로 모든 포인터 구성원을위한 것입니다. 그러나 구조에 유효한 데이터가 있는지는 확실합니다. 핸들 함수를 생성하기 위해 드라이버 함수에서 사용하며 잘 실행됩니다. 필요한 것은 구조의 전체 이미지를 복사하여 텍스트 파일에 저장하는 것입니다. 나는 그것을 어떻게 할 것이냐? 일부 회원 필드가 null 인 이유는 무엇입니까? 구조의 주소 제한을 찾기 위해 무차별 방식으로 생각하고 있습니다. 그러나 가치 자체는 읽을 때 무효로 보입니다. 나는 그것에 대해 어떻게 해야할지 모르겠습니다!
구조 2
Memory Dump 추가
고마워요!
'key' 필드의 값을 확인해 보셨습니까? 현재, 당신은'char * '를'cout'에 보내고, 그것이 유효하지 않은 포인터 (널 포인터)라면 프로그램이 충돌합니다. 아마도 포인터를 숫자 ('unsigned long'? my C is rusty ...)에 캐스트해야합니다. –
'ptr'가 가리키는 객체의 내용을 보여줘야합니다. 아마'key'는 무엇이든 그리고 따라서 UB로 초기화되지 않을 것입니다. –
printf ("포인터 값은 % p \ n", ptr-> key); –