On Mon, Jan 5, 2015 at 3:39 PM, Sven Barth <pascaldra...@googlemail.com> wrote:
> Am 05.01.2015 21:33 schrieb "Michael Van Ham" <michael.van...@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@lists.freepascal.org > http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal > Thank you for the explanation Sven!
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal