W momencie, kiedy funcja ma dokonać przypisania przez ReadBuffer dostaję acces violation. Nie bardzo wiem co robię źle.

// t:przychodzący mem stream
// ind: indeks początkowy
// len: indeks końcowy (długość to delta tych indeksów)
// tmp: tutaj chcę mieć zawartość od ind do len jako elementy tablicy

function Tmain.b2t(t:TMemoryStream; ind,len:integer):string;
var tmp:array of char;
begin
SetLength(tmp, len-ind);
t.Seek(ind,soFromBeginning);      
t.ReadBuffer(tmp,len-ind);

// dalej byłoby zwracanie tego w formie stringu, w którym zamienia się znaki od 0-31 na '#'+ord(tmp[i]), ale niestety - funkcja nigdy tam nie dociera.
end;

Czy ktoś może mi powiedzieć, co może być przyczyną błędu?