2015-02-21 2 views
0

Я пытаюсь отобразить содержимое определенной ячейки памяти, и у меня возникает загадочная ошибка. Ниже функция Я использую:Ошибка C-Bus с ячейками памяти

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; 
} 

Когда я ввожу соответствующую команду (мД), а затем по месту нахождения х (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) 

Есть ли проблема с попыткой отобразить символ как межд? Мне нужно показать шестнадцатеричное значение того, что хранится в месте ввода. Любая помощь приветствуется!

ответ

1

Ваша система требует правильного выравнивания указателей разыменования. Убедитесь, что вы вводите значение с правильным выравниванием (вероятно, sizeof(int) в вашем случае). Кроме того, просто используйте указатель char. Вы должны иметь доступ к любым адресам таким образом - просто убедитесь, что это одна ваша программа, сопоставленная и которой разрешен доступ!

+0

Есть ли способ узнать, имеет ли значение правильное выравнивание или нет, кроме тестирования, чтобы узнать, получится ли ошибка шины? – JazzBullets

+0

Уверен, что вы можете проверить значение; убедитесь, что у него есть правильное количество бит младшего порядка, равное нулю. –

+0

Большая часть этой терминологии для меня нова, поэтому, к сожалению, я точно не знаю, что это значит. Мне нужно иметь возможность отображать 16 бит в строке из любого места, к которому имеет доступ программа, так же как я могу отображать значение в местоположении ffbef54b, или это полностью не работает? – JazzBullets