Проблемный код, скорее всего, этот
FillChar(wSpaces,cSpacesAfter,' ');
Я предполагаю, что wSpaces
имеет строковый тип.Строковая переменная на самом деле является не чем иным, как указателем на структуру данных, которая содержит строку.Вам не нужно использовать синтаксис указателя, потому что компилятор позаботится об этом за вас.
Итак, этот код перезаписывает переменную, содержащую этот указатель, с 4 пробелами, а затем записывает на 1031 пробел сверху.всего, что следует за переменной.Короче говоря, вы полностью испортите свою память.Это объясняет, почему FillChar
работает, но следующая строка кода умирает мучительной и драматической смертью.
Если в вашей строке действительно есть место для 1035 символов, вы можете вместо этого написать:
FillChar(wSpaces[1], cSpacesAfter, ' ');
Впрочем, если идиоматичнее написать:
wSpaces := StringOfChar(' ', cSpacesAfter);