<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:st1="urn:schemas-microsoft-com:office:smarttags" xmlns="http://www.w3.org/TR/REC-html40"
xmlns:ns0="http://schemas.microsoft.com/office/2004/12/omml">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
 namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="place"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--a:link
        {mso-style-priority:99;}
span.MSOHYPERLINK
        {mso-style-priority:99;}
a:visited
        {mso-style-priority:99;}
span.MSOHYPERLINKFOLLOWED
        {mso-style-priority:99;}

 /* Font Definitions */
 @font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:Calibri;}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:Calibri;
        color:#1F497D;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>It seems that we all focus on the StrCopy.
That&#8217;s misleading.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Let&#8217;s look at this code:<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>procedure test;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>var&nbsp; a: pChar;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>begin<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>&nbsp; &nbsp;a := 'abc&#8217;;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>&nbsp;&nbsp;&nbsp;a[1] := &#8216;A&#8217;;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>end;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>procedure TForm1.Button1Click(Sender:
TObject);<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>begin<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp; test;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>end;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>The line : a[1] will cause exactly same AV
as your example.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>As CPU window shows cpu instruction in assembly
language, not many people can understand it, I do further experiment:<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>procedure test;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>var&nbsp; a: pChar;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>const ConsStr &nbsp;= 'abc';<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>begin<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>&nbsp; &nbsp;a := @ConsStr[1];<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>&nbsp;&nbsp;&nbsp;a[1] := &#8216;A&#8217;;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>end;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>The same AV will happen. And that&#8217;s
the key problem where your code actually is.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Now we can see that the reason of your
code crash:<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><st1:place w:st="on"><font size=3 color="#1f497d"
 face=Calibri><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>Delphi</span></font></st1:place><font
size=3 color="#1f497d"><span lang=EN-NZ style='font-size:12.0pt;color:#1F497D'>
compile 'abcdefghi' as the local const value. <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>Certainly constant value is not allowed
to change.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>If you put a line : ConsStr := &#8216;def&#8217;;
Compiler won&#8217;t let you go.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>If you purposely use the trick of
pointer : <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>&nbsp; &nbsp;a := @ConsStr[1];<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>&nbsp;&nbsp;&nbsp;a[1] := &#8216;A&#8217;;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>to bypass compiler checking, the &nbsp;operating
system then has to activate the last protection by showing the AV and stop your
program to run. <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Bevan is right : the area of memory for
const value is protected while the application is running.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<div>

<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span style='font-size:12.0pt;font-family:"Times New Roman"'>

<hr size=2 width="100%" align=center tabindex=-1>

</span></font></div>

<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
delphi-bounces@listserver.123.net.nz
[mailto:delphi-bounces@listserver.123.net.nz] <b><span style='font-weight:bold'>On
Behalf Of </span></b>Ross Levis<br>
<b><span style='font-weight:bold'>Sent:</span></b> Sunday, 12 May 2013 2:39
a.m.<br>
<b><span style='font-weight:bold'>To:</span></b> 'NZ Borland Developers Group -
<st1:place w:st="on">Delphi</st1:place> List'<br>
<b><span style='font-weight:bold'>Subject:</span></b> [DUG] StrCopy problem</span></font><font
size=3 face="Times New Roman"><span style='font-size:12.0pt;font-family:"Times New Roman"'><o:p></o:p></span></font></p>

</div>

<p class=MsoNormal><font size=2 face=Calibri><span style='font-size:11.0pt'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>var<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>&nbsp; a: pChar;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>&nbsp; b: pChar;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>begin<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>&nbsp; a := 'abcdefghi';<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>&nbsp; b := 'jklmnopqr';<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>&nbsp; StrCopy(a,b);<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>end;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'>Question:&nbsp; Why does this code
crash?<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 color="#1f497d" face=Calibri><span lang=EN-NZ
style='font-size:12.0pt;color:#1F497D'><o:p>&nbsp;</o:p></span></font></p>

</div>


<FONT size=2 face=Arial>
<P>
<HR>
<STRONG>Attention: </STRONG><BR><FONT color=#808080>This mail and any 
attachments are for the use of the intended recipient only, and may contain 
information which is confidential and/or privileged. If you have received this 
email in error, please advise us by return email and immediately delete this 
email together with all attachments. The contents of this email may only be 
used, distributed or copied with the consent of the author. </FONT><FONT 
color=#808080>Fairview Metal Industries Ltd takes reasonable precautions to 
minimise the risk of this email containing any viruses but does not accept 
liability for any damage caused by software viruses and advises the recipient to 
carry out their own virus check on any attachments.<BR></FONT></FONT><FONT 
size=2 face=Arial>
<HR>
</FONT>
<P></P>
<P></P>
</body>

</html>