[DUG] StrCopy problem

Ross Levis ross at stationplaylist.com
Mon May 13 14:29:15 NZST 2013


It is working so strings must be allocated differently.  It is a global var
definition in the DLL.

 

From: delphi-bounces at listserver.123.net.nz
[mailto:delphi-bounces at listserver.123.net.nz] On Behalf Of Bevan Edwards
Sent: Monday, 13 May 2013 9:17 AM
To: NZ Borland Developers Group - Delphi List
Subject: Re: [DUG] StrCopy problem

 

Hi Ross,

That's interesting, because I would have thought that using StrCopy(Title,
'12345') in this situation would have resulted in the same problem - the
compiler must allocate the string differently in this case ;-)

Regards,

Bevan



On 13/05/2013 2:31 a.m., Ross Levis wrote:

In the end I did this.

 

var TitleStr: string='The DLL Title';

var Title: pChar;

Title := @TitleStr[1];

 

I could then use CopyStr elsewhere.

 

Cheers.

 

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 7:52 PM
To: NZ Borland Developers Group - Delphi List
Subject: Re: [DUG] StrCopy problem

 

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> 
Date: 
To: 'NZ Borland Developers Group - Delphi List'
<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] 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] 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

 






_______________________________________________
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/20130513/a5c1073c/attachment.html 


More information about the Delphi mailing list