Russian Qt Forum

Программирование => С/C++ => Тема начата: Igors от Июнь 12, 2013, 15:21



Название: Мистический EXC_BAD_ACCESS [решено]
Отправлено: Igors от Июнь 12, 2013, 15:21
Добрый день

Крашиится в последней строке
Код
C++ (Qt)
ssef temp1, temp2, temp3[10];
temp1 = temp2;
temp3[0].v[0] = 1;
std::cout << temp3[0] << " " << temp3 << std::endl; // <1, 0, 0, 0> 0xb03fecd4
 
temp3[0] = temp2; // EXC_BAD_ACCESS
 
Хедер ssef.h прилагаю. Мда, так меня еще не били :) Пока не знаю в чем дело. А Вы?

Спасибо


Название: Re: Мистический EXC_BAD_ACCESS
Отправлено: maint от Июнь 12, 2013, 16:42
с каких это пор структуру структуре присваивать можно стало ?


Название: Re: Мистический EXC_BAD_ACCESS
Отправлено: Old от Июнь 12, 2013, 16:52
с каких это пор структуру структуре присваивать можно стало ?
С момента рождения C++? :)
Там даже конструктор копирования и оператор присваивания определен. ;)


Название: Re: Мистический EXC_BAD_ACCESS
Отправлено: LisandreL от Июнь 12, 2013, 17:39
Ответа у меня нет. Что в нормальной ситуации ошибка означает вы наверняка и сами знаете.
Под отладкой смотрели? В operator= заходит? На присвоении крашится или на return *this?
Вообще у меня воображения кроме как на баг компилятора не хватает. Другим чем собирать не пробовали? Или с другими настройками оптимизации?


Название: Re: Мистический EXC_BAD_ACCESS
Отправлено: Old от Июнь 12, 2013, 18:46
Вообще у меня воображения кроме как на баг компилятора не хватает.
Такое же мнение. Там инлайны во все поля, стоит смотреть код, который сделал компилятор. Что он там на оптимизировал. Можно попробовать собрать без оптимизации для проверки.


Название: Re: Мистический EXC_BAD_ACCESS
Отправлено: Igors от Июнь 13, 2013, 10:01
Код в аттаче (добавил вызов отладчика "после" чтобы видно было где кончается). Конечно все без оптимизации. Откатываться на др компилятор - весьма накладно, много завязок. В др проекте этот же код (с этим же компилятором) работает успешно. Экспериментирую, будут результаты - отпишусь


Название: Re: Мистический EXC_BAD_ACCESS
Отправлено: Bepec от Июнь 13, 2013, 10:08
Я б может и покопался, только нехватает хедеров и типов :D


Название: Re: Мистический EXC_BAD_ACCESS
Отправлено: Old от Июнь 13, 2013, 11:11
Код в аттаче (добавил вызов отладчика "после" чтобы видно было где кончается).
Интересно. А чему будет равен eax на строчку выше (после его установки)?


Название: Re: Мистический EXC_BAD_ACCESS
Отправлено: Igors от Июнь 13, 2013, 11:52
Интересно. А чему будет равен eax на строчку выше (после его установки)?
Тому самому что распечатался.

Вроде разобрался. Адрес должен быть кратен 16. Поменял выравнивание по умолчанию (было 4) - все норм. Почитаю еще про movaps и код 13, потом помечу как "решено"


Название: Re: Мистический EXC_BAD_ACCESS
Отправлено: Igors от Июнь 13, 2013, 15:16
Да, movaps требует выровненных адресов. Хотя я не нашел что должно возбуждаться исключение 13, но видимо так.

Ну вот, оказывается серая действительность, бытовуха, никакой романтики  :'(


Название: Re: Мистический EXC_BAD_ACCESS
Отправлено: Old от Июнь 13, 2013, 16:12
Хотя я не нашел что должно возбуждаться исключение 13, но видимо так.
Первая же ссылка google на "movaps":
http://www.club155.ru/x86cmdsimd/MOVAPS


Название: Re: Мистический EXC_BAD_ACCESS
Отправлено: Igors от Июнь 13, 2013, 17:30
Хотя я не нашел что должно возбуждаться исключение 13, но видимо так.
Первая же ссылка google на "movaps":
http://www.club155.ru/x86cmdsimd/MOVAPS
Именно там я и был :)  Да, есть
Цитировать
#GP(0) при некорретном эффективном адресе операнда в памяти в сегментах CS, DS, ES, FS или GS, и для всех сегментов если операнд в памяти не выровнен по 16-байтным границам.