Показать сообщение отдельно
  #9  
Старый 14.03.2013, 13:14
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Как я сказал, эта процедура вызывается при ВСЕХ присваиваниях строк.
Как раз старый указатель на Nil проверяется всегда. А поскольку у Вас там мусор - то и ошибка.
А в хелпе написано, что делается с НОВОЙ строкой. То есть создаётся новая строка, а если не получилось(Nil), то и вызывается EOutOfMemory.

По поводу того, что при выполнении шамашских действий начинает работать.
Мусорный указатель не всегда приводит к Access Violation. Или приводит, но не сразу. Или ошибка выскочит где-нибудь через час работы программы на ровном месте. В Вашем случае этот указатель мог совпасть с указателем на вот эту строку 'hello'. Поскольку она константная, счётчик у неё равен -1, а для таких строк FreeMem не вызывается.

И запомните - если программа работает правильно(или Вам так кажется), это не значит, что в ней нет ошибок.
Ответить с цитированием