Ответ 1
Переменная Result
в этой функции не была инициализирована и может содержать любое значение. Теперь деталь реализации означает, что в некоторых комбинациях параметров компилятора ваш код запускается с Result
, ссылаясь на действительный объект. Но это действительно просто совпадение этих деталей реализации.
Если это был С++, тогда эта функция будет демонстрировать поведение undefined. Хотя этот термин не имеет формального значения в Delphi, может оказаться полезным использовать этот термин в настройке Delphi для обозначения того же самого, что и в контексте С++.
Я также хотел бы подчеркнуть, что даже если Result
не ссылался на действительный объект списка строк, ваш код не гарантировал бы повысить нарушение доступа. Возможно, что Result
указывает на блок памяти, который просто выглядит достаточно, как список строк для успешного выполнения этого кода.
Если вы все сделаете правильно, вы можете предсказать поведение вашей программы. Если ваш код испорчен и вызывает поведение undefined, то поведение вашей программы становится непредсказуемым. Это может сработать. Он может потерпеть неудачу. Или этот код может выполняться нормально, но затем приведет к сбою позже в выполнении программы. И так далее.