[DUG] StrCopy problem

Bevan Edwards bevan at achieve.co.nz
Sun May 12 19:52:10 NZST 2013


Hi Ross,

You don't say which version of Delphi you're using, but I assume it's 
pre-Unicode support, since you use PChar instead of PAnsiChar or PWideChar.

Out of curiosity I built a small test application and traced through the 
source code for this snippet of code using the CPU window.  What I 
noticed is that the address of the two strings assigned to 'a' and 'b' 
are part of program memory.  More specifically, Delphi appears to store 
these strings immediately after the "return" opcode for the procedure 
and simply puts those addresses into 'a' and 'b'.  Since this area of 
memory is protected while the application is running, that's why you get 
the error.

By using:
a:=AllocMem(10);
StrCopy(a, 'abcdefghi');
b:='jklmnopqr';
StrCopy(a, b);

The variable 'b' now points to application memory while 'a' is allocated 
a "write-enabled" memory address, so the access violation doesn't occur.

Regards,

Bevan



On 12/05/2013 5:30 p.m., Ross Levis wrote:
>
> I did see a & b had a pointer address allocated.  It looked like a 
> normal pointer address range.  I'll try allocating 10 bytes to a later 
> and see what happens.
>
> Ross.
>
> *From:*delphi-bounces at listserver.123.net.nz 
> [mailto:delphi-bounces at listserver.123.net.nz] *On Behalf Of *Bevan Edwards
> *Sent:* Sunday, 12 May 2013 4:48 PM
> *To:* delphi at listserver.123.net.nz
> *Subject:* Re: [DUG] StrCopy problem
>
> Actually, based on that article a:='abcdefghi' should assign 10 bytes 
> and include the zero byte at the end. But I wonder if the problem is 
> due to where this data is stored and trying to copy b to a results in 
> an attempt to write to protected memory?
>
> Have you tried allocating 10 bytes of memory to 'a' and then using 
> StrCopy?
>
> Have you run the debugger and checked where the PChars 'a' and 'b' are 
> pointing to before StrCopy?
>
>
>
>
> -------- Original message --------
> From: Ross Levis <ross at stationplaylist.com 
> <mailto:ross at stationplaylist.com>>
> Date:
> To: 'NZ Borland Developers Group - Delphi List' 
> <delphi at listserver.123.net.nz <mailto:delphi at listserver.123.net.nz>>
> Subject: Re: [DUG] StrCopy problem
>
> Doesn't really help.
>
> a := 'abcdefghi' does allocate 9 bytes of RAM.  I can access a and b 
> after it is assigned.  The problem is StrCopy crashes.  I would expect 
> "a" to have the same string as b once this is executed.
>
> Ross.
>
> *From:*delphi-bounces at listserver.123.net.nz 
> <mailto:delphi-bounces at listserver.123.net.nz> 
> [mailto:delphi-bounces at listserver.123.net.nz] *On Behalf Of *Keith 
> Allpress
> *Sent:* Sunday, 12 May 2013 10:27 AM
> *To:* 'NZ Borland Developers Group - Delphi List'
> *Subject:* Re: [DUG] StrCopy problem
>
> Perhaps:
>
> http://rvelthuis.de/articles/articles-pchars.html
>
> *From:*delphi-bounces at listserver.123.net.nz 
> <mailto:delphi-bounces at listserver.123.net.nz> 
> [mailto:delphi-bounces at listserver.123.net.nz] *On Behalf Of *Ross Levis
> *Sent:* Sunday, 12 May 2013 2:39 a.m.
> *To:* 'NZ Borland Developers Group - Delphi List'
> *Subject:* [DUG] StrCopy problem
>
> var
>
>   a: pChar;
>
>   b: pChar;
>
> begin
>
>   a := 'abcdefghi';
>
>   b := 'jklmnopqr';
>
>   StrCopy(a,b);
>
> end;
>
> Question:  Why does this code crash?
>
>
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at listserver.123.net.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at listserver.123.net.nz with Subject: unsubscribe

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserver.123.net.nz/pipermail/delphi/attachments/20130512/da808477/attachment-0001.html 


More information about the Delphi mailing list