메모리 주소 호환성 문제를 방지하는 방법 분할 오류(코어 덤프)

메모리 주소 호환성 문제를 방지하는 방법 분할 오류(코어 덤프)

조사하는 동안 일반 규칙을 해킹 하려고 시도 C하고 메모리 주소를 변수에 저장하려고 시도했지만 코드가 실패했습니다.분할 오류(코어 덤프)64비트 시스템에서 실행하는 경우. 그 이유는 4/8비트(32/64비트 시스템) 메모리 때문입니다. 문제는 uintptr_t두 시스템을 모두 만족시키기 위해 어떤 기본 유형이 필요합니까?(아님) 입니다. long long int? 내 출처:

int main() {
    int i;

    char char_array[5] = {'a', 'b', 'c', 'd', 'e'};

    unsigned int hacky_nonpointer;

    hacky_nonpointer = (unsigned int) char_array;

    for(i=0; i < 5; i++) {
        printf("[hacky_nonpointer] points to %p, which contains the char '%c'\n",
            hacky_nonpointer, *((char *) hacky_nonpointer));
        hacky_nonpointer = hacky_nonpointer + sizeof(char);
    }
}

답변1

적절한 포인터 유형을 사용하십시오.

#include <stdio.h>

int main() {
    int i;

    char char_array[5] = {'a', 'b', 'c', 'd', 'e'};
    char *char_pointer = char_array;

    for(i=0; i < 5; i++) {
        printf("[char_pointer] points to %p, which contains the char '%c'\n",
           char_pointer, *char_pointer);
        char_pointer++;
    }
}

관련 정보