First of, just a general tip: Even though you can omit the "private, public, published" you shouldn't for greater readabiltiy and to make sure that things don't get mixed up.

Secondly, if you get an Access Violation that most likely means that you haven't created your TDPMap object. Even though you don't need to have your own constructor, you'll have to call the inherited one.

So do this
Map := TDPMap.Create;
and to free it call
Map.Free;


Although this has nothing to do with your problem, I would recommend that you turn all variables in your class into properties. To create an array property do this

private
FMyArray: array[1..MapWidth - 1, 1..MapHeight - 1] of Integer;
public
property MyArray[X, Y: Integer]: Integer read GetValue write SetValue;

in GetValue do

Result := FMyArray[X, Y]

and in SetValue do

FMyArray[X, Y] := Value;

You don't have to do this, but it's always good to follow the standards.