![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
null56 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
Всем привет
Столкнулся впервые с такой ситуацией, поэтому решил спросить 1) почему она возникает? 2) как бы вы решили эту проблему (только в коде)? вот фрагмент кода
делаем сборку с флагами
Получаем ошибку предупреждение:
Я впервые увидел такое и решил вот так
Заранее благодарен за помощь ЗЫ: эти три флага компиляции менять нельзя |
||||||||
|
|||||||||
bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Это именно то, о чем говорил Сыроежка - на некоторых платформах доступ к неправильно выровненным объектам может вызвать крах программы. По стандарту ты должен сделать так:
Это сообщение отредактировал(а) bsa - 22.7.2011, 17:15 |
||||
|
|||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
спасибо
|
|||
|
||||
xvr |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Это немного не то. Это предупреждение от оптимизатора, а конкретно от блока анализа pinter aliasing. Пример:
Но если включен режим strict-aliasing, то компилятор считает, что указатели на разные типы не могут смотреть на одну и ту же память (и даже частично пересекаться) Так что вышеизложенная функция сокращается до
Код ТС ((ushort *)msg) заставляет результат выражения (указатель на ushort) и msg (указатель на char) физически ссылаться на одну и туже память, что нарушает предположения режима strict-aliasing Решение - не писать так, или добавить опцию --fno-strict-aliasing, которая отключает режим strict-aliasing |
||||||
|
|||||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
xvr, а вот это более понятно, спасибо
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |