0
값에 일부 주소를 인쇄하고 싶습니다. 다음은 제가 원하는 것을 출력 해 놓은 것입니다.C : 포인터 및 합집합 및 주소
dumper outputs...
Address +x00 +x04
0x7fff5ad8c980 000000b8 000000ff
0x7fff5ad8c990 000000a8 000000ff
0x7fff5ad8c9a0 000000e1 000000ff
0x7fff5ad8c9b0 00000001 00000000
0x7fff5ad8c9c0 00000000 00000000
그러나 이것은 추한 외모와 나는이 사용하는 조합을 수행해야합니다
// I need the first address to start with zero.
void printoutAddr(char* x, int n, int sign) {
printf(" Address +x00 +x04\n");
intptr_t y = (intptr_t)x;
// to round it down every 16 byte
char *z = (char *)((y + 15)&~15);
// or char *z = (char *)(y&~15);
if (sign>0) {
for (int i=0; i<n; i++) {
printf("%p %.08x %.08x\n"
, (char *)(z+16*i)
, *(char *)(z+16*i)
, *(char *)(z+4+16*i);
}
} else {
for (int i=n; i>0; i--) {
printf("%p %.08x %.08x\n"
, (char *)(z+16*i)
, *(char *)(z+16*i)
, *(char *)(z+4+16*i);
}
}
}
그리고 출력은 다음과 같다. 그리고 나는 다음을 시도해 봤다.
void printoutAddr(char* x, int n, int sign) {
printf(" Address +x00 +x04\n");
intptr_t y = (intptr_t)x;
char *z = (char *)((y + 15)&~15);
union ptrs {
char * ptr ;
int num ;
} xptr ;
xptr.ptr = z;
xptr.num = n;
if (sign>0) {
for (int i=0; i<n; i++) {
printf("%p %.08x %.08x\n"
, (char *)(xptr.ptr+16*i)
, *(char *)(xptr.ptr+16*i)
, *(char *)(xptr.ptr+4+16*i));
}
} else {
for (int i=n; i>0; i--) {
printf("%p %.08x %.08x\n"
, (char *)(xptr.ptr+16*i)
, *(char *)(xptr.ptr+16*i)
, *(char *)(xptr.ptr+4+16*i));
}
}
}
I 라인 printf("%p %.08x %.08x\n"
에
의 오류를 얻고있다 ... EXC_BAD_ACCESS
그리고 그것을 해결하는 방법을 모른다
위와 같은 조합을 사용하여 같은 것을 인쇄하는 다른 방법이 있습니까?
나는 당신이 무엇을하려고하는지 전혀 모른다. 결국 무엇을 인쇄해야합니까? –
'union '대신에'struct'를 쓰려고했다는 뜻인가요? 'union '의 요소들은 같은 메모리 위치를 점유하므로'xptr.ptr = z;'와'xptr.num = n;'명령문은 모두 같은 바이트의 메모리에 영향을 미친다. 다음에'xptr.ptr'에 접근하려고하면 메모리 오류가 발생합니다. –
"구조체"가 아니라 노동 조합이 아니라고 생각합니다. 시도해 봐. 노조에서 포인터를 사용하지 마십시오. 결과는 예측할 수 없습니다. – PMF