[fpc-pascal] strlower causes EAccessViolation

Sven Barth pascaldragon at googlemail.com
Mon Jan 5 21:39:30 CET 2015


Am 05.01.2015 21:33 schrieb "Michael Van Ham" <michael.vanham at gmail.com>:
>
> Hello,
>
> The simple program below compiles and produces the expected output in
2.6.4. In 2.7.1 (3.1.1 now)  an EAccessViolation is caused.
>
> The strlower function seems to be in strings.inc and written in
assembler. Unfortunately I can not decipher the assembly to research
further.
>
> ---
>
> program teststrlowersimple;
>
> {$mode objfpc}
> {$H+}
>
> uses
>   sysutils;
>
> var
>   s : string;
>   p : pchar;
>
> begin
>   s := 'UPPPERCASESTRING';
>   p := pchar(s);
>   strlower(p); // EAccessViolation: Access violation
>   writeln(s);
> end.

It's because in your example s points to a constant string which since
2.7.1 resides in a non-writeable section of the executable (Delphi
compatible if I remember correctly). Instead of assigning a constant try
for example  "Readln(s)" or use UniqueString(s) (if I remember the function
name correctly) after the assignment.

Regards,
Sven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20150105/959dcaff/attachment.html>


More information about the fpc-pascal mailing list