Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2011, 16:47   #1
Unmanner
Пользователь
 
Регистрация: 18.03.2011
Сообщений: 47
По умолчанию Purify UMR error WHY??

Всем привет!

Такая проблема есть число:
Код:
unsigned short a;
Есть дефайн:
Код:
#define b 123
И есть их сравнение:
Код:
if(a > b){...}
Так вот, Purify ругается и говорит что я читаю 4! байта начиная с адреса &a и естественно выхожу за границу. Как быть??

Такой вариант(как мне не показалось стренным тоже не прокатил):
Код:
if(a > (unsigned short)b){...}
Нужно это сделать как можно компактнее и красивее, как 2 числа спавнить все знают, а как так чтобы без лишних бубнов?
Unmanner вне форума Ответить с цитированием
Старый 02.06.2011, 16:54   #2
Unmanner
Пользователь
 
Регистрация: 18.03.2011
Сообщений: 47
По умолчанию

Да, и разумется есть строчка:

Код:
a = 5;
Unmanner вне форума Ответить с цитированием
Старый 03.06.2011, 12:34   #3
Unmanner
Пользователь
 
Регистрация: 18.03.2011
Сообщений: 47
По умолчанию

Друзья, в чём проблема?
Unmanner вне форума Ответить с цитированием
Старый 03.06.2011, 12:46   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

а что такое это ваше Purify?
а так все правильно
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 03.06.2011, 13:08   #5
Unmanner
Пользователь
 
Регистрация: 18.03.2011
Сообщений: 47
По умолчанию

Анализатор ошибок памяти..

ДА о нём тут можно забыть, только объясните почему при таком сравнении мы вылезаем за границы памяти переменной "а" даже в том случае когда сравниваем её с аналогичным типом??
Unmanner вне форума Ответить с цитированием
Старый 03.06.2011, 17:51   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
а так все правильно
Вы не правы.

Код:
unsigned short a;
2 байта

Код:
#define b 123
4 байта

О чем вам правильно и намекают. Другое дело, что умный компилятор теоретически может это преобразовать правильно.
p51x вне форума Ответить с цитированием
Старый 03.06.2011, 18:28   #7
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Код:
if(a > (unsigned short)b)
но тогда это точно должно работать
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Периодическая ошибка Run-time error -2147417848 (80010108) Automation error в файле с макросом faraviper Microsoft Office Excel 0 24.02.2011 16:23
классы - Error 3 error C2228: left of '.BlockAll' must have class/struct/union c:\documents and settings\ Dimarik Visual C++ 1 08.02.2011 15:16
Ищу причину ошибки: Error in loading DLL, она же Error 48. hozpraktik Microsoft Office Excel 1 19.11.2009 12:39
Как решить проблему с Error in loading DLL (Error 48)? Klim Bassenger Microsoft Office Excel 4 23.10.2009 13:44