C—内存位置的总线错误

C—Bus error with memory locations

我正在尝试显示特定内存位置的内容,但遇到了一个令人费解的错误。下面是我正在使用的函数:

int mem_display(Cmd *cp, char *arguments)
{
    int x = 10;
    char c = 'c';
    int input = 0;
    sscanf(arguments, " %x", &input)
    int *location = (int*)input;

    printf("location of int x: %p\n", (void*)&x);
    printf("location of char c: %p\n", (void*)&c);
    printf("%x\n", *location);
    return 0;
}

当我键入正确的命令 (md) 后跟 x 的位置 (ffbef54c) 时,它会正确显示。但是,当我尝试多一个或少一个时,出现错误:

UNIX-tutor> md ffbef54c
location of int x: ffbef54c
location of char c: ffbef54b
ffbef54c
a
UNIX-tutor> md ffbef54b
location of int x: ffbef54c
location of char c: ffbef54b
ffbef54b
Bus error (core dumped)

尝试将 char 显示为 int 有问题吗?我需要能够显示存储在我输入的位置的任何内容的十六进制值。感谢任何帮助!

您的系统需要正确对齐以取消引用指针。确保您输入的值具有正确的对齐方式(在您的情况下可能是 sizeof(int))。或者,只需使用 char 指针。您应该能够以这种方式访问​​任何地址 - 只要确保它是您的程序已映射并允许访问的地址!