如何避免内存地址的兼容性问题分段错误(核心转储)

如何避免内存地址的兼容性问题分段错误(核心转储)

我试图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++;
    }
}

相关内容