Dynamic arrays from pointer

I have got a pointer to a shared memory area.
In this area there is stored lets say 10 succesitive integers.
Now I want to access each of these integers in an array like syntax.

something like this

if sharedmem[1] = 10 then ..

Is that possible, I don't know the numbers at designtime. So it should be dynamic.
Who is Participating?
SchweizerDConnect With a Mentor Commented:
I am assuming you can't use open arrays here. In that case you're restricted to typecasting:

   TIntArray = array[1..1000] of integer;
   PIntArray = ^TIntArray;
    SharedMem: PIntArray;
   SharedMem := PIntArray(...)  ;
// substitute your pointer, assuming you have it, for the three dots

   // now:
   SharedMem^[1] := 12;
   if SharedMem^[1] = 10 then
// etc.

Yep, David is right. In my type definition base unit I'm declaring these types (and some more) for my convenience:

  // TAxxx = array [0..maxPossible] of xxx
  TAByte         = array [0..maxInt      -1] of byte;
  TAShortInt     = array [0..maxInt      -1] of shortInt;
  TAChar         = array [0..maxInt      -1] of char;
  TABoolean      = array [0..maxInt      -1] of boolean;
  TAExtBool      = array [0..maxInt      -1] of TExtBool;
  TAWord         = array [0..maxInt shr 1-1] of word;
  TASmallInt     = array [0..maxInt shr 1-1] of smallInt;
  TACardinal     = array [0..maxInt shr 2-1] of cardinal;
  TAInteger      = array [0..maxInt shr 2-1] of integer;
  TAPointer      = array [0..maxInt shr 2-1] of pointer;
  TAString       = array [0..maxInt shr 2-1] of string;
  TAIUnknown     = array [0..maxInt shr 2-1] of IUnknown;
  TAInt64        = array [0..maxInt shr 3-1] of int64;

  // TPAxxx = ^(array [0..maxPossible] of xxx)
  TPAByte        = ^TAByte;
  TPAShortInt    = ^TAShortInt;
  TPAChar        = ^TAChar;
  TPABoolean     = ^TABoolean;
  TPAExtBool     = ^TAExtBool;
  TPAWord        = ^TAWord;
  TPASmallInt    = ^TASmallInt;
  TPACardinal    = ^TACardinal;
  TPAInteger     = ^TAInteger;
  TPAPointer     = ^TAPointer;
  TPAString      = ^TAString;
  TPAIUnknown    = ^TAIUnknown;
  TPAInt64       = ^TAInt64;

Now I can always use something like the following without ever getting an out-of-bounds exception:

  if TPAInteger(sharedMemoryPointer)^[index] = blabla then ...

Regards, Madshi.
bnzAuthor Commented:
Ahh clever :)
All Courses

From novice to tech pro — start learning today.