Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > некоректные данные


Автор: chaos 24.10.2008, 07:02
День добрый столкнулся с проблемой:

Код

std::string response;

...................

unsigned long tmp;
float value;
void *ptr = NULL;
char *offset = NULL;

................................

offset = ACE_const_cast(char *, (response.c_str() + CUR_PARAM_Q_OFFSET));
tmp = ((unsigned char)(offset[0]) << 0) + ((unsigned char)(offset[1]) << 8) +
((unsigned char)(offset[2]) << 16) + ((unsigned char)(offset[3]) << 24);
ptr = &tmp;
value = *(float *)ptr;
ACE_DEBUG((LM_DEBUG, ACE_TEXT("Q = %f\n"), value));
m_cur_q_de->set_value(value, de::quality_good, ACE_OS::gettimeofday());


в данном случае Q не правельное

как только я добавляю 
Код

ACE_HEX_DUMP((LM_DEBUG, offset, 4));

после строчки offset =....
данные становятся правельные  smile 
как такое вообще возможно?

использую 
Код

chaos@druid:~/Work/Arm/App/pipgw_prj/tc/Debug$ /opt/q+esto/cdt/bin/arm-linux-gcc -v
Using built-in specs.
Target: arm-linux-gnueabi
Configured with: ../../src/gcc-4.1.1/configure --target=arm-linux-gnueabi --prefix=/opt/q+esto/cdt 
--enable-shared --enable-languages=c,c++ --enable-threads=posix --with-float=soft 
--program-transform-name=s,^,arm-linux-, --disable-nls --enable-symvers=gnu --enable-__cxa_atexit 
--enable-c99 --enable-long-long
Thread model: posix
gcc version 4.1.1



ЗЫЫ тулчайн собирал не сам, где нашел и пользуюсь
ЗЫЫЫ если кто знает где можно скачать 100% нормальный тулчайн под арм, буду благодарен smile



Автор: chaos 6.11.2008, 16:36
решил проблемы с помощью -fno-strict-aliasing
только не совсем понимаю смысла почему так :(

Автор: chaos 7.11.2008, 07:12
http://www.cellperformance.com/mike_acton/2006/06/understanding_strict_aliasing.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)