2014-01-29 4 views
1

Тест на Linux 32bit:Почему переменная становится равной нулю?

Я нашел ошибку в своем коде C, и я упростить код и поместить его здесь:

#define al *(char*)(eax_ptr) 
int eax = 0; 
int *eax_ptr = &eax; 
int edx = 0; 
char hh = 254; 
....... 

eax = hh; 
edx = al; 

Проблема заключается в том, что, EDX должно быть 254, но где я использую gdb для отладки, I fould edx равным нулю.

Может ли кто-нибудь помочь мне с этой проблемой ..?

Спасибо!

+4

http://en.wikipedia.org/wiki/Endianness –

+0

Какой процессор это? Ваши имена переменных намекают на x86, но я не вижу, как он может печатать ноль, если это не big-endian. – Mysticial

+0

@Mysticial x86 Я использую Macbook и запускаю в нем виртуальную машину Linux. – computereasy

ответ

2

Результат этого кода не предсказуем. Инициализация

char hh = 254;

Не уверены, чтобы быть успешным на любой платформе. char может не иметь возможности удерживать 254 (и это не значит, что ваша платформа использует подписанные символы и 8-битные символы, общий выбор).

Предполагая, что charможет содержать значение, таких как 254, это назначение:

eax = hh;

расширит hh до размера целого, вставив ведущие нули. Когда вы позже интерпретируете eax (целое число), как если бы это был символ (на самом деле это то, что вы делаете с актом), результат будет зависеть от консистенции вашего компьютера: если он немногочислен, он будет читать 254, он будет читать 0.

Смежные вопросы