[fpc-pascal] strlower causes EAccessViolation

Michael Van Ham michael.vanham at gmail.com
Mon Jan 5 23:41:30 CET 2015


On Mon, Jan 5, 2015 at 3:39 PM, Sven Barth <pascaldragon at googlemail.com>
wrote:

> 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
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>

Thank you for the explanation Sven!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20150105/0bda297c/attachment.html>


More information about the fpc-pascal mailing list