В коде нашёл спящую ошибку. Есть строка типа...
char *str=new char[len];
В эту строку раз за разом копируется разный текст через strcpy
strcpy_s(str,len,src);//src каждый раз разный
Потом эта строка отправляется куда-то на обработку, а после обработки в неё копируется следующая строка. Это происходит не в цикле, а методом китайского кода, т.е. строка за строкой.
Оставим в стороне вопрос о том, почему сразу не отправлять src. Тому есть причина.
Несколько копирований проходит успешно, но во время очередного я получаю access violation. Откуда он там может быть? Я тихо копирую в свою область раз за разом. Может быть, не хватает места?
Но путём отладки я обнаруживаю, что ошибка происходит при копировании в ПЕРВЫЙ байт. А когда это возможно?
Когда пытаешься копировать в const-область или типа того. Но у меня же не константная область? Точнее, не была константная ещё три строчки назад. Хммм...
Поднимаю глаза на предыдущие строки. А там примерно следующее:
if(very_rare_option)
{
str="Very rare string";
}
Много лет редкий флаг не выставлялся, поэтому строчка не выполнялась. Но я выставил этот флаг. В результате произошло присваивание. Но в Си++ строки таким образом не присваиваются. Тип правого выражения это const char *, а тип левого -- char *. Я присвоил константный указатель на строку и успешно с ним поработал. Но при попытке записи я стал записывать не по старому адресу, на который была выделена память, а по адресу &"Very rare string", который теперь содержался в str. А там запрещённая для записи область...
Естественно, пришлось переписать:
strcpy_s(str,len,"Very rare string");
И проблема исчезла.