# Q: pointers inside of an array of structures?

• Subject: Q: pointers inside of an array of structures?
• From: Amara Graps <Amara.Graps(at)mpi-hd.removethis.mpg.de>
• Date: Wed, 16 Aug 2000 10:01:06 +0200
• Newsgroups: comp.lang.idl-pvwave
• Organization: Max-Planck-Institut fuer Kernphysik
• Xref: news.doit.wisc.edu comp.lang.idl-pvwave:20870

```
Hi Folks,

I am trying to create and build a flexible data structure
in IDL for a situation where we have fields of different types
in a structure, and then that structure is made into an array
of structures using "replicate". And I extend the
array of structures by concantenating, because I don't
know how many structures I need.

My question: Can a field inside of the array-of-structures be
a pointer ?

For example --

I know how to flexibly extend a structure,
with each of the fields defined the same way:

-------
Create an array of an anonymous structure
IDL> thisstruc = {orbit:'', len:0,freq:DBLARR(100)}
IDL> periodcube = replicate(thisstruc,1)

;Put values into the structure
IDL> periodcube(0).orbit='G2'
IDL> periodcube(0).len=50    ;to store length of array : freq
IDL> periodcube(0).freq=DINDGEN(50)

;Create a temporary structure like the original
IDL> tempperiod = thisstruc

;Put values into the temporary structure
IDL> tempperiod.orbit='G3'
IDL> tempperiod.len=75
IDL> tempperiod.freq=DINDGEN(75)

;Now extend it by concatenating
IDL> newperiodcube=[periodcube,tempperiod]

;Take a look
IDL> help, newperiodcube, /st
** Structure <89af0>, 3 tags, length=816, refs=4:
ORBIT           STRING    'G2'
LEN             INT             50
FREQ            DOUBLE    Array[100]
IDL> print, newperiodcube(0).orbit, ' ', newperiodcube(1).orbit
G2 G3
IDL> print, newperiodcube(0).len, ' ', newperiodcube(1).len
50       75
-------

But what about varying data lengths inside of the array of
structures, for example, if my freq arrays are each a different
length:

IDL> thisstruc = {orbit:'', freq:ptr_new()}
IDL> periodcube = replicate(thisstruc,1)

;Put values into the structure
IDL> periodcube(0).orbit='G2'
IDL> *periodcube(0).freq=DINDGEN(50)
% Unable to dereference NULL pointer: <POINTER  (<NullPointer>)>.
% Execution halted at:  \$MAIN\$

What am I doing wrong?

Is it possible to have pointers inside of an array of structures?

My pointer programming experiences were 15 yrs ago in a Pascal
class.. it's quite possible I'm missing something big, with how
the pointers work...

Amara

P.S. IDL Version 5.3 (sunos sparc)
--

***************************************************************
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

```