[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Structure field concatenation

Ben Tupper wrote:
> Hello and thanks to all,
> I guess I'm headed toward pointers as fields.   

There's alot of discussions here about structures and pointers
as fields inside of the structures. I'm learning alot, but still
having some trouble. I have made my best attempt to getting a 
structure-with-pointer array concatenation to work properly, 
and I've not been successful yet.

Everything works fine up to the point that I concatenate the array,
then I lose the previous definition of the pointer. Is there a
pointer cleanup that I should be doing? 

My test code is the following:

;-------begin test code
;Create an anonymous structure
thisstruc = {orbit:'',freq:ptr_new(/allocate_heap)}

;Create an array of anonymous structure
periodcube = replicate(thisstruc,1)

;Assign the structure values
periodcube(0).orbit = 'G2'
*periodcube(0).freq=DINDGEN(100)  ;first pointer array is len 100

;set a variable to the pointer
test1 = *periodcube[0].freq
;Take a look
help, test1   ;(it's len 100, and OK)

;Update the structure by creating a temporary structure like the
;original, and then concantenating
tempperiod = thisstruc
;Assign values to the structure
*tempperiod.freq = DINDGEN(50)+50  ;this pointer array is len 50

;Set a variable to the pointer
test2 = *tempperiod.freq
;Take a look
help, test2       ;(it's len 50, and OK)

;Concatenating   (here is where the problem begins)
new = [periodcube,tempperiod]

;Set variables to the pointers in the structure
freq1 = *new[0].freq
freq2 = *new[1].freq

;Take a look
help, freq1, freq2     ;WHY ARE FREQ1 FREQ2 THE SAME?
help, *new[0].freq,*new[1].freq     ;BOTH LENGTH 50.. WHY?
help, new[0].orbit, new[1].orbit   ;THESE STRINGS ARE OK THOUGH

;---end test code

Can anyone give me a hint about why the second pointer is overwriting 
the definition of the first pointer?  

Thanks very much, in advance,


Amara Graps               | Max-Planck-Institut fuer Kernphysik
Interplanetary Dust Group | Saupfercheckweg 1   
+49-6221-516-543          | 69117 Heidelberg, GERMANY
                          * http://galileo.mpi-hd.mpg.de/~graps  
      "Never fight an inanimate object." - P. J. O'Rourke