×
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 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.