23 Apr 17 20:52, Semen Panevin послал(а) письмо к Michael Dukelsky:
SP>>> Перечитал всё что можно про delete и delete[], поставил SP>>> несколько следственных экспериментов в рамках остаточных SP>>> сиплюсплюсных познаний, и даже попытался осилить XlatStr(...). SP>>> На первый взгляд косяков не обнаружено. Но падает...
SP>>> Падает точно после XlatStr. Если её закомментить - то не падает.
MD>> Копаться в этом коде лень. SP> Т.е. всё? можно попрощаться со спелчекером?
Ну почему же? У меня даже нет права корректировать исходники голдеда на сервере. Так что на меня не надо ориентироваться. Я просто подсказал тебе возможную причину падения.
SP> Или есть шанс, что найдётся кто-то кому не лень?
Шанс есть всегда. :)
MD>> Скорее всего эта функция пишет в массив, не MD>> проверяя нарушения границ массива, и радостно перезаписывает то MD>> место, где хранится указатель на массив. После чего попытка MD>> освобождения выделенной памяти приводит к краху.
SP> Под dest выделяется памяти src len + 1. Я пробовал увеличить в 2 раза, SP> не помогло.
Не надо гадать. Надо проверить, что функция XlatStr действительно портит значение указателя на выделенную память. Если портит, то нужно разобраться из-за чего это происходит, из-за того, что она получает неверные данные, которые она не должна была получить, или из-за ошибки в самой функции. В первом случае неверные данные могут быть такими, что функция пишет по адресам, меньшим чем начало выделенного массива памяти. Поэтому сколько памяти не выделяй, это не поможет. В обоих случаях надо добавить проверку входных данных функции, чтобы она не могла писать за границы выделенного массива. Ну и в случае неверных данных надо разбираться, откуда эти неверные данные взялись.
Желаю успехов, Semen! За сим откланиваюсь, Michael.