|
Wow... I wouldn't use CLEAR *ALL on a based MODS, that seems very dangerous. I'm surprised you aren't wiping out other arbitrary variables in your program... I've always assumed that the CLEAR op-code doesn't know how much memory you've allocated to the structure, and will just wipe out the entire maximum size of the structure. I haven't tested this, but I'd imagine you're writing blanks & zeros past the end of your allocation... On Thu, 20 Jun 2002, Smith, Nelson wrote: > Hans, > > On tighter debugging, I've determined that the 601 error is occuring on a > CLEAR *ALL to the MODS name. I'm doing REALLOC's to this MODS one record at > a time and the pointer address changes each time (as it should) I reallocate > the additional amount of memory needed. At the time of the CLEAR operation, > the pointer is still pointing to the address it was changed to on the last > REALLOC operation. The offending code is: > > C CLEAR *ALL ScanReplSrc > > An interesting point is that even though ScanReplSrc is a 150 byte > datastructure, the dump obtained after the MCH0601 shows it to be a type of > ZONED(5,0). In the dump, the pointer is still showing the valid address > that was set at the last REALLOC, but the MODS name shows a value of NOT > ADDRESSABLE. > > Apparently, I just can't use CLEAR *ALL after a MODS has been moved? Is > CLEAR trying to clear the MODS at it's original address rather than it's > current address? If I just REALLOC the MODS back down to 1 byte, and then > REALLOC it back up to it's current size, will that effectively clear out all > the prior data? Or, will it reset the pointer to the same address (since the > amount of memory is the same) and see the data that was previously loaded > there? > > > -----Original Message----- > > From: Hans Boldt [SMTP:boldt@ca.ibm.com] > > Sent: Wednesday, June 19, 2002 3:53 PM > > To: rpg400-l@midrange.com > > Subject: Re: Pointer Question > > > > Smith, Nelson wrote: > > > I've got a MODS based on a pointer with OCCURS = 32767. I ALLOC & > > REALLOC > > > memory to the pointer all during the program. At some point, I DEALLOC > > the > > > pointer and it changes to a NULL pointer. If I then ALLOC to it again, > > the > > > pointer takes on a valid address, but references to the MODS cause a > > space > > > offset error (MCH0601) due to trying to operate outside of "an implicit > > > process space for activation group-based heap storage". > > > > For that last ALLOC before the abend, are you allocating *less* > > storage than the previous? The occurrence number is assigned to > > static storage, and does not change when storage for a based MODS is > > reallocated. Perhaps the program is abending because the occurrence > > number points to an occurrence beyond the end of the allocated storage? > >
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.