pr0z
|
||||||
1 | ||||||
Не работает деструктор и ошибка при использовании SSE-команд.17.11.2011, 10:50. Показов 1551. Ответов 4
Метки нет (Все метки)
Написал класс матрицы, начал писать деструктор - начало вылазить сообщение об ошибке вида "Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)". Убираю деструктор - все работает.
Что касается SSE - написал метод суммирования матриц с его использованием, но при использовании самой SSE-функции вылазит ошибка: "Необработанное исключение в "0x00fb18db" в "matr.exe": 0xC0000005: Нарушение прав доступа при чтении "0xffffffff"." В чем может быть проблема? Вот код программы:
|
17.11.2011, 10:50 | |
Ответы с готовыми решениями:
4
Ошибка "Непредвиденное появление" при использовании оператора условного выполнения команд При использовании каких команд возможно создание индексов? При использовании команд Vim в CMD в текстовый файл записываются кракозябры При использовании каких команд возможна установка отношений между таблицами? |
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
17.11.2011, 11:09 | 2 |
Так нельзя делать. Данные должны быть выровнены на границу 16 байт.
Вот честно признаюсь, первый раз такую запись вижу. Сейчас погуглю, но по моему в интернете кто-то не прав. Хотя бы объявление тогда такое сделай: __declspec(align(16)) float *a Т.е. есть выделение памяти в виде функции, которая выделяет на сколько-то байт больше, чем нужно для выравнивания и возвращает указатель не на начало выделенной области, а на выровненный блок в этой области. Немного сдвинуто от начала. Соответственно и при удалении нужно использовать не указатель на начало выровненной памяти, а несколько "левее". Повторюсь, new с выравниванием я вижу впервые, но не сомневаюсь, что и указатель нужно делать выровненным. Типы должны совпадать всё таки. Добавлено через 59 секунд _aligned_malloc и _aligned_free я функции использовал, когда выровненные данные нужны были. Про new надо погуглить... Добавлено через 4 минуты Вот что по этому поводу думает Майкрософт: http://msdn.microsoft.com/ru-r... thb65.aspx
1
|
pr0z
|
|||||||||||
18.11.2011, 03:02 | 4 | ||||||||||
Кто вам сказал, что я не понимаю ее смысл? Я не спорю с тем, что могу использовать ее неправильно, но я уверен в ее необходимости. И я пришел сюда за советом, а не для того, чтобы меня тыкали в носом в мое незнание.
Добавлено через 10 минут Попробовал использовать данный вариант
В плане использования с new - да, MSDN это пишет. Однако конструкция
Я постараюсь конкретнее сформулировать свой вопрос: могу ли я выровнять массив данных уже внутри функции, которая его использует? |
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
18.11.2011, 05:53 | 5 |
При инициализации массива не используется динамическое выделение памяти, а используется стек. Для стековых переменных __declspec(align(16)) применять можно и нужно. Для new использовать нельзя, что я, со свойственной мне грациозностью, нашёл в документации к компилятору.
0
|
18.11.2011, 05:53 | |
18.11.2011, 05:53 | |
Помогаю со студенческими работами здесь
5
Переменной не присваивается новое значение при использовании оператора IF с заключённым в скобки блоком команд Как работает деструктор и конструктор при наследовании? Ошибка при использовании vector (в конце, после вывода результатов выскакивает ошибка, но сам результат коректен) Ошибка при использовании ADODB.CONNECTION при работе с dbf-файлом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |