[fpc-pascal] Accessing open array

Mark Morgan Lloyd markMLl.fpc-pascal at telemetry.co.uk
Sun Jun 3 18:18:30 CEST 2012

Koenraad Lelong wrote:
> Hi,
> Im trying to access an open array but I get a runtime error. I googled a 
> bit, and found some suggestions, but for me they don't work.
> It's actually a port of some C-library I want to use on a STM32-processor.
> This is my test-code :
> program LCDtest1;
> type
>  TArray = array of byte;
> var
>  nCols : cardinal;
>  nRows : cardinal;
>  nBytes : cardinal;
>  pFont : ^TArray;
> {$include fonts.inc}
> begin
> // get pointer to the beginning of the selected font table
> pFont:=@FONT6x8;
> writeln('0');
> setlength(pFont^,8);  <-- here it crashes

> I didn't have the setlength at first, then it crashed at the first 
> access of the array (ncols:=...).
> The include file contains this (only partly shown) :
> originally :
> const
>   FONT6x8 : array[0..96] of array[0..7] of byte = (

Assuming that in your current implementation FONT6x8 is a table at an 
absolute location in memory... I don't think you can do that, since a 
dynamic array (which I think is what you're trying to use) is nowt but a 
descriptor block which contains a pointer into the heap. Try something like

type	TFONT6x8= array[0..96] of array[0..7] of byte;
	PFONT6x8= ^TFONT6x8;

var	fontTable: PFONT6x8;

Force your absolute address into fontTable, then dereference to get at 
the content.

Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]

More information about the fpc-pascal mailing list