Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
12.02.2016, 13:36
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
DLL стабильно вылетала с исключением на одном компе. Вставил запись в лог после каждой строчки, в итоге все свелось к Код: plaintext 1. я офигел, заменил на Код: plaintext 1. 2. и все заработало. Visual Studio 2015 Community 14.0.24720 Update 1 Проект Win32 DLL PlatformToolset = Visual Studio 2015 - Windows XP (v140_xp) Сглючило на древнем компе WinXP, на других работает, в т.ч. под WinXP Вот такой привет от с++14. Там ведь {0} это означает не просто ноликами заполнить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.02.2016, 18:10
|
|||
|---|---|---|---|
|
|||
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Dima TВот такой привет от с++14. Там ведь {0} это означает не просто ноликами заполнить. А можно привести цитату из стандарта из которой это уже не инициализация массива нулями, а что-то другое? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.02.2016, 18:28
|
|||
|---|---|---|---|
|
|||
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Со своей стороны привожу цитату отсюда http://en.cppreference.com/w/cpp/language/aggregate_initialization If the number of initializer clauses is less than the number of members or initializer list is completely empty, the remaining members are initialized by their default initializers, if provided in the class definition, and otherwise (since C++14) by empty lists, which performs value-initialization. If a member of a reference type is one of these remaining members, the program is ill-formed (references cannot be value-initialized) Из этой цитаты следует, что с С++14 для элементов которым не хватило инициализаторов выполняется инициализация value-initialization, которая для обычных int'ов равна default-инициализации и равна присвоению 0. Т.е. проблема не в этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.02.2016, 18:47
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Anatoly MoskovskyDima TВот такой привет от с++14. Там ведь {0} это означает не просто ноликами заполнить. А можно привести цитату из стандарта из которой это уже не инициализация массива нулями, а что-то другое? Код: plaintext 1. Я разве сказал что это не иницизация нулями? Я сам это ожидал. из книжки авторПростая замена текста приводит к следующему коду: auto xl = 2 7 ; auto х2 ( 2 7 ) ; auto х3 = { 27 } ; auto х4 { 2 7 } ; 1 .2. Вывод типа auto 33 Все эти объявления компилируются, но их смысл оказывается не тем же, что и у объявлений, которые они заменяют. Первые две инструкции в действительности объявляют переменную типа int со значением 27. Вторые две, однако, определяют переменную типа std::initializer_list<int>, содержащую единственный элемент со значением 27! auto x l = 2 7 ; 1 1 Тип int , значение - 27 auto х2 ( 2 7 ) ; 11 То же самое auto хЗ = { 2 7 } ; 11 std : : initializer_list<int>, значение ( 2 7 } auto х4 { 2 7 } ; 11 То же самое Это объясняется специальным правилом вывода ... Да как бы пофиг как оно инициализируется, т.к. это буфер под Md5 который после снова инициализируется. Засада в том что поменялось понимание синтаксиса, как следствие изменения в компиляторе, как следствие косяк в компиляторе, в моем случае вылет проги на ровном месте (обращение к несуществующей памяти). Как обнаружил: втыкал запись в лог после каждой строчки, компилировал и тестил. В итоге получил: Код: plaintext 1. 2. 3. 4. 123 в логе было, 124 нет. Это не окончание проги, т.к. вокруг есть __try ... __except(EXCEPTION_EXECUTE_HANDLER) ... Вобщем заменив на Код: plaintext 1. 2. 3. 4. 5. увидел в логе 124 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.02.2016, 18:52
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Причем это один комп из нескольких сотен с той же DLL отлично работающей. ХЗ как понимать этот глюк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.02.2016, 19:16
|
|||
|---|---|---|---|
|
|||
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Dima TЗасада в том что поменялось понимание синтаксиса, как следствие изменения в компиляторе, как следствие косяк в компиляторе, в моем случае вылет проги на ровном месте (обращение к несуществующей памяти). Так а причем здесь С++14? ))) У вас баг в программе (ну или в компиляторе, но скорее всего именно у вас) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.02.2016, 19:18
|
|||
|---|---|---|---|
|
|||
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Dima TПричем это один комп из нескольких сотен с той же DLL отлично работающей. ХЗ как понимать этот глюк. Давайте ассемблерный код обоих вариантов функции - посмотрим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.02.2016, 20:08
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Anatoly MoskovskyDima TПричем это один комп из нескольких сотен с той же DLL отлично работающей. ХЗ как понимать этот глюк. Давайте ассемблерный код обоих вариантов функции - посмотрим. Его уже нет. Хорошо что клиент дал полдня на разбор. В итоге была выявлена строчка (как выявлена выше написал), затем откат к исходной версии cpp из респозитория и исправление этой строчки. Вобщем то чего надо сравнивать в идеале - не осталось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.02.2016, 13:40
|
|||
|---|---|---|---|
|
|||
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Вопрос в размерности типа BYTE и константы 0. Возможно происходит запись в область памяти вне buf(да к тому же это стековая переменная). Имхо смешивание c и с++ может дать такой результат. Как уже сказали без ассемблерного листинга трудно будет что то сказать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.02.2016, 21:18
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Еще подозрение: у клиента был Pentium3, возможно компилятор вставил какую-то асмовскую команду неизвестную тому процессору, вот и вылетело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.02.2016, 04:24
|
|||
|---|---|---|---|
|
|||
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
L.OtujktdВопрос в размерности типа BYTE и константы 0. Возможно происходит запись в область памяти вне buf(да к тому же это стековая переменная). Имхо смешивание c и с++ может дать такой результат. Нет конечно. Не фантазируйте )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 06:23
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Dima T, ну там 20 секунд написать BYTE buf[16] = {0}; и запустить под 2015 под отладчиком, тоже хочу увидеть асм, так как всегда пользуюсь этой конструкцией :( 2005: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 09:11
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
из книжкив книжке std::initializer_list накатывается именно для auto , в случае же BYTE , он во всех 4-х случаях будет одинаковый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 09:38
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Посмотрел: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Как уже предполагал 18813821 похоже вылет из-за XORPS http://asm.inightmare.org/opcodelst/index.php?op=XORPS CPU: Pentium III+ (KNI/MMX2) там проц какой-то древний был, вроде PIII, а может и древнее, точно не помню. Новые стандарты ни при чем. Смутило то что выше в коде было Код: plaintext 1. и не вылетало. Оно совсем по другому компилируется Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 10:41
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 11:47
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
SiemarglТогда убрать /arch:SSE https://msdn.microsoft.com/en-us/library/7t5yh4fd.aspx автор/arch:SSE2 Enables the use of SSE2 instructions. This is the default instruction on x86 platforms if no /arch option is specified. Попробовал добавить /arch:SSE ничего не изменилось. /arch:IA32 тоже не меняет. Да и отключать везде ради одного древнего компа - как-то не нормально. Лучше клиенту объяснить что пора бы комп обновить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 12:24
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
[quot Dima T]SiemarglТогда убрать /arch:SSE Попробовал добавить /arch:SSE ничего не изменилось. /arch:IA32 тоже не меняет. Да и отключать везде ради одного древнего компа - как-то не нормально. Лучше клиенту объяснить что пора бы комп обновить.вообще убери SSE судя по всему, у С14 это дефолтная опция... о_О MAX_PATHКстати, обратите внимание, в компиляторе сидит демон Максвелла. В приведённом мной коде, он сначала обнуляет 1 байт, потом 4 байта, потом ещё 4, потом 2 и ещё 1. А когда константа разрастается до уровня MAX_PATH, он ниасиливает и вставляет mem_set. Правильно я всё понял? Где-то я уже на такое натыкался... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 13:39
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Dima TЛучше клиенту объяснить что пора бы комп обновить. а собрать под разные компы - никак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 14:00
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
ИзопропилDima TЛучше клиенту объяснить что пора бы комп обновить. а собрать под разные компы - никак? потом всю оставшуюся жизнь делать два комплекта обновлений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 14:55
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Dima TИзопропилпропущено... а собрать под разные компы - никак? потом всю оставшуюся жизнь делать два комплекта обновлений? чем это отличается от версий для x86 и x64 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 15:26
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
ИзопропилDima Tпропущено... потом всю оставшуюся жизнь делать два комплекта обновлений? чем это отличается от версий для x86 и x64 ? ничем, только у меня нет x64 и пока не ожидается. Это вспомогательная DLL для проги на фоксе, а Visual FoxPro x64 никто не обещает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 16:11
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Dima T, остаются варианты - собирать под самый дохлый процессор - в требованиях прописать минимальный (неплохо бы проверить при запуске, что процессор удовлетворяет минимальным требованиям) - собирать старым компилятором ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 16:20
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Изопропил- собирать под самый дохлый процессор - собирать старым компилятором Не для того я с VC6 на VC2015 переехал наконец-то. Ладно хоть под XP собирает. Изопропил- в требованиях прописать минимальный (неплохо бы проверить при запуске, что процессор удовлетворяет минимальным требованиям) Спасибо. Отличная мысль, погуглю как проверялку сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 16:44
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
Dima T, Последняя нормальная студия с поддержкой XP - 2010. Потом то студия не работает на XP, то без патча не собирает, то спецрантайм. К .NET тоже относится - 3.5 (будет вечно поддерживаться) или 4.0 (уже снимается с поддержки). И под Веб почему то тоже последний WebDeveloper, который ставится со всеми обновлениями - на базе 2010. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2016, 17:10
|
|||
|---|---|---|---|
BYTE buf[16] = {0}; вылетает с исключением. |
|||
|
#18+
SiemarglDima T, Последняя нормальная студия с поддержкой XP - 2010. Потом то студия не работает на XP, то без патча не собирает, то спецрантайм. Тоже так считал пока не стал вникать: 2010 последняя работающая под XP. Потом МС выпустил 2012 которая не компилировала под XP, но позже выпустили очередной сервиспак где была возвернута компиляция под XP 2015 под XP отлично компилирует, только в свойствах проекта надо поставить "Platform toolset: Visual Studio 2015 - Windows XP (v140_xp)" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2018609]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 175ms |

| 0 / 0 |
