[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