Wataru, ck_str по ходу алгоритма постоянно обновляется (там идёт присвоение нового адреса указателю), а original_key - нет. Так что это точно не ошибка. Хотя может быть, реализовано коряво.
Как я понял, падение происходит где-то внутри acraw(), возможно, внутри prepareKeys(). До выделения кода генерации ключей в отдельную функцию оно точно так же падало, кстати.
Я так и сделал в функции, генерирующей ключи (мне кажется, падение происходит в ней). И она отрабатывает минимум (максимум?) два раза из требуемых семи, судя по максимальному количеству строк в выводе, которое я вижу.
Есть ещё функции кэширования и чтения из структуры кэша ключей, в которых я не вполне уверен, но я полностью закомментировал их использование, и ошибка не пропала.
Denwebart, не могу согласиться, что в Windows плохо даже на HDD (сам работал). Ставил на Windows 7 SP1 Apache 2.4 и PHP (5.3, 5.6, 7.2, 7.4 и 8.0). Всё летает. Также работал с проектами на Symfony (2.x и 5.x). Да, пятёрка подтормаживает, по крайней мере на этапе создания кэша шаблонов в большом проекте, но в остальном - терпимо. Двойка - вообще летает.
Я не понимаю, что у вас тормозит - у вас или процессор ужасно медленный, или медленная оперативная память, или тяжеленные неоптимизированные CMS-ки. Сам PHP (как и Apache) не тормозит ни раз на винде.
Denwebart, всё дело в CMS и фреймворках - они очень тормозные, вот серьёзно. А насчёт того, почему летает под Linux... Ну, тут моих знаний не хватает, трудно сказать. Возможно, дело в более оптимизированной файловой системе, а вовсе не в веб-сервере. Уж сколько я читал жалобы людей про тормоза докера на Windows (при любых настройках, когда надо лопатить много мелких файлов)...
Прошу прощения, я снимаю отметку о решении. Ваш ответ не решает проблему: сейчас у меня этот баг происходит и под gcc, и под g++, и данный флаг ничем не помогает. Это какие-то кэши, которые где-то оседают во временных папках (виртуальной среды ucrt64?), и у меня нет возможности их очистить.
Поставил "-O0" как вы предложили, но нумерация строк всё так же сбоит. Значит или дело не в оптимизации в данном случае, или обёртка от VSCode игнорирует часть флагов в режиме отладки по каким-то своим причинам...
Кстати, проблема с тем, что отмечаются не те строчки, имеет место даже тогда, когда я перед отладкой делаю обычную компиляцию и запуск. Это тоже как-то связано с оптимизациями?
ck_str
по ходу алгоритма постоянно обновляется (там идёт присвоение нового адреса указателю), аoriginal_key
- нет. Так что это точно не ошибка. Хотя может быть, реализовано коряво.