× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



On 3/8/11 9:13 AM, M. Lazarus wrote:
Given this code:

D Array1 DS Dim( 10 )
D Field1 2a
D Field2 75a

D Array2 DS Dim( %Elem( Array1 ))
D Based( Array1Ptr ) Inz( %Addr( Array1 ))
D Field1a Like( Field1 )
D Field2a Like( Field2 )

D Array1Ptr s *

/Free
Array1Ptr = %Addr( Array1( 10 )) ;
...

At this point, the first element of Array2 should be positioned over
the last element (#10) of Array1. Assuming I don't attempt to access
element 2 in Array2, is this safe to do or will the shift of Array2,
elements 2-10, overlay memory it shouldn't?


If even the assignment does what is alluded, then that is 'unsafe' because the based storage will indeed "overlay memory it shouldn't". The storage beyond Array1 is undefined, and could occupy effectively random automatic storage. While the source statements may [appear to] avoid addressing elements 2-10, the implementation of those statements may not; e.g. specification on factor ?2? on a call parameter may effect rewrite of the variable, thus writing to storage that was not correctly allocated, which as noted is effectively random storage.

"If even" is noted, because if like I recall in another [PL based] language, the element [literal] specification is ignored when assigning a pointer to an "array". If so in the given scenario, then the effect would have the based Array2 overlay Array1 storage one-for-one in elements, and thus, no longer have the capability to corrupt\address anything other than the declared Array1 data\storage. I did not compile the example to verify the address or see if a warning is issued to that effect; i.e. warn that the element is ignored, and the address of the array rather than an element of the array is used when assigning the address to the pointer.

Regards, Chuck

As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.