[Back to DATATYPE SWAG index] [Back to Main SWAG index] [Original]

    {
    >  I'm trying to figure out a way to declair a Variable, such as an
    >  Array, and I don't know the size Until I've loaded the Program.
    >  I've tried stuff like........
    >  Type
    >      Buf : Array[1..1000] of Char;
    >  Var
    >      Buffer : ^Buf
    >  begin
    >    Getmem(Buffer,xxx)
    }

    Type
      TElement = LongInt ;     { Here use your own }

    Const
      MaxElement = 65500 div Sizeof(TElement) ;

    Type
      TElementArray = Array[1..MaxElement] of TElement ;
      PElementArray = ^TElementArray ;

    Var
      i    : Word ;
      Elms : PElementArray ;

    begin
      Write('How many of ''em do you feel like using ? :') ;
      ReadLn(i) ;
      if i>MaxElement then
      begin
        WriteLn('That''s more than I can hold, sorry...') ;
        Halt(1) ;
      end ;
      GetMem(Elms, i*Sizeof(TElement)) ;

      { Now, use Elms^[1] to Elms^[i] }

      FreeMem(Elms, i*Sizeof(TElement)) ;
    end.

    {
    Please note that the previous allows you to keep range checking on, but that
    does not garanty you any security : access to an element which's index is
    greater than i would cause no RTE, but writing to it will quite mess up things
    in memory...
    }

[Back to DATATYPE SWAG index] [Back to Main SWAG index] [Original]