<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Jan 5, 2015 at 3:39 PM, Sven Barth <span dir="ltr"><<a href="mailto:pascaldragon@googlemail.com" target="_blank">pascaldragon@googlemail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p>Am 05.01.2015 21:33 schrieb "Michael Van Ham" <<a href="mailto:michael.vanham@gmail.com" target="_blank">michael.vanham@gmail.com</a>>:</p><div><div class="h5"><br>
><br>
> Hello,<br>
><br>
> 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.<br>
><br>
> The strlower function seems to be in strings.inc and written in assembler. Unfortunately I can not decipher the assembly to research further.<br>
><br>
> ---<br>
><br>
> program teststrlowersimple;<br>
><br>
> {$mode objfpc}<br>
> {$H+}<br>
><br>
> uses<br>
>   sysutils;<br>
><br>
> var<br>
>   s : string;<br>
>   p : pchar;<br>
><br>
> begin<br>
>   s := 'UPPPERCASESTRING';<br>
>   p := pchar(s);<br>
>   strlower(p); // EAccessViolation: Access violation<br>
>   writeln(s);<br>
> end.</div></div><p></p>
<p>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.</p>
<p>Regards,<br>
Sven</p>
<br>_______________________________________________<br>
fpc-pascal maillist  -  <a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a><br>
<a href="http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal" target="_blank">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal</a><br></blockquote></div><br></div><div class="gmail_extra">Thank you for the explanation Sven!</div><div class="gmail_extra"><br></div></div>