say24

Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Устал ломать голову, предлагаю вопрос на обсуждение: Всё по порядку: 1. Visual Studio 2010, C++ 2. Делаю внешнюю DLL - для вызова совсем из другой среды. 3. Выяснил, что крэшится оно на участке, вызывающем memmove_s Теперь о неопнятках: 1. Вызов происходит так: if(условие) memmove_s(...); условие - специально для проверки сделано неисполнимым, ну практически написано if(false) memmove_s(...); При этом, если строка с вызовом закомментарена - всё ОК, а если нет, то при вызове DLL из внешней среды - падает. Причём падает очень интересно - лог не пишется вообще, хотя по ходу кода файл с логом закрывается после каждой записи. 2. memmove_s используется для сдвига части массива (внутри самого массива). Если массив передаётся как указатель из внешней среды - всё работает. А если массив создан внутри DLL - как раз и происходит сбой. 3. Ошибки связаны с использованием памяти, не принадлежащей процессу... Не надо, прочтя этот пункт, говорить "ха-ха" - это никак не объясняет фантастику с крэшем после снятия комментария с итак неисполняющейся строки; кроме того, непонятно почему функция работает, при вызове извне - размеры и типы массивов - одинаковые, всё проверено. | Всего записей: 266 | Зарегистр. 18-02-2003 | Отправлено: 23:51 31-01-2013 | Исправлено: say24, 23:55 31-01-2013 |
|