Notes |
|
(0018493)
|
zed
|
11-01-2019 16:31
|
|
Какие ошибкИ? Дебажная версия создаёт лог? |
|
|
|
Добавил картинки. Пойдёт? |
|
|
(0018495)
|
zed
|
11-01-2019 16:51
(edited on: 11-01-2019 16:52) |
|
Не пойдёт.
0. Скачать крайнюю ночную версию;
1. Запустить SASPlanet.NonUnicode.Debug.exe;
2. Воспроизвести ошибку;
3. Приложить создавшийся *.elf файл с логом.
|
|
|
|
|
|
(0018497)
|
zed
|
11-01-2019 17:09
|
|
Метки в SML формате храните?
У меня никак не воспроизводится... |
|
|
|
Да, в SML
Дайте время, протестю ещё раз |
|
|
|
На крайней ночнушке тоже самое
Эльфа вложил |
|
|
(0018500)
|
zed
|
11-01-2019 17:34
|
|
Можете записать видео того, как вы воспроизводите ошибку на чистой ночной сборке? |
|
|
|
|
|
|
Zed Я Вам отправил ЛС, получили? |
|
|
(0018507)
|
zed
|
14-01-2019 06:07
|
|
Нет. По определённым причинам со мной невозможно связаться через форум.
Пишите мне на почту [email protected], если надо что-то обсудить в привате. |
|
|
(0018508)
|
zed
|
14-01-2019 12:00
|
|
Получил видео, воспроизвёл ошибку и нашёл баг в TIDInterfaceList.
Как воспроизвести:
- создать пустую SML базу меток;
- добавить 2 метки в одну вновь созданную категорию;
- удалить категорию;
- закрыть программу - произойдёт AV в методе TIDInterfaceList.SetCapacity на строке SetLength(FList, NewCapacity) (NewCapacity = 0, т.е. идёт очистка списка).
Сам баг живёт в методе TIDInterfaceList.Delete, когда происходит удаление НЕ последнего элемента, т.е. когда вызывается метод Move.
Засада в том, что элемент содержит интерфейсную переменную и после Move остаётся её мусорная копия. Всё бы ничего, мы же в коде к той переменной не обращаемся и RefCount работает как надо, но вот когда вызывается SetLength, который обнаруживает там интерфейсную переменную не равную nil, вот тогда он и пытается её удалить и вываливается в AV.
Есть 2 решение проблемы:
- подчищать мусор после Move в Delete;
- использовать Realloc и указатель на массив, вместо SetLength в SetCapacity.
Первый метод проще, его и применил. |
|
|
|
> Первый метод проще, его и применил.
Все правильно. Похожий код есть при вставке элемента.
Но я совсем не понимаю, как эта бяка прожила там так долго. Капец. |
|