Конференция "Прочее" » Exit внутри Try/Finally [D6, XP]
 
  • Mystic © (14.11.08 20:59) [20]
    Честно говоря я тоже какое-то время ломал себе голову над тем, откуда там утечка, но по другой причине. В коде строкам в программе присваиваются литеральные значения (за исключением экземпляра типа TStringList, но он уже к нужному моменту уничтожается). Следовательно все переменные типа string должны указывать на образ файла, и RefCount = $FFFFFFFF. Однако оказалось, что при вызове @LStrAsg все-таки происходит динамическое выделение памяти, даже если source литеральная строка. Впрочем понятный коментарий в этой функции объясняет и причину, по которой так сделано: чтобы исключить AV в случае динамической выгрузки пакета и/или DLL. С другой стороны осталось загадкой, почему компилятор поставил на операторе
    Result := def

    вызов @LStrAsg, а не @LStrLAsg, ведь Result это не глобальная переменная...
  • Mystic © (14.11.08 21:22) [21]
    Впрочем и это понятно :) Поскольку в операторе используется Result, и фиг его знает, какой переменной будет присвоено значение функции (глобальной или локальной), то закладываться надо на самый худший вариант.
  • Palladin © (14.11.08 22:28) [22]

    > Впрочем и это понятно :)

    ага, уже потом.. )))
 
Конференция "Прочее" » Exit внутри Try/Finally [D6, XP]
Есть новые Нет новых   [134446   +31][b:0][p:0.001]