[Lazarus-es] uso de SetLength

Rafael Bidegain r.bidegain en gmail.com
Mar Jul 26 03:45:17 CEST 2016


>
>
> Podrías por favor compartir tu programa de prueba?.
>
si.
es este:

program ad1;
type
TAD = array of string;

function hacer_TAD(a,b,c:string) : TAD;
begin
SetLength(Result,3);
Result[0] := a;
Result[1] := b;
Result[2] := c;
end;


procedure mostar_heap();
var
mi_heap : THeapStatus;
begin
mi_heap := getheapstatus();
writeln('TotalAddrSpace..: ', mi_heap.TotalAddrSpace);
//writeln('TotalUncommitted: ', mi_heap.TotalUncommitted);
//writeln('TotalCommitted..: ', mi_heap.TotalCommitted);
writeln('TotalAllocated..: ', mi_heap.TotalAllocated);
writeln('TotalFree.......: ', mi_heap.TotalFree);
//writeln('FreeSmall.......: ', mi_heap.FreeSmall);
//writeln('FreeBig.........: ', mi_heap.FreeBig);
//writeln('Unused..........: ', mi_heap.Unused);
//writeln('Overhead........: ', mi_heap.Overhead);
writeln('HeapErrorCode...: ', mi_heap.HeapErrorCode);
writeln('-------------------------------------');
end;
(*
compilar de esta forma:
fpc -MObjfpc ad1.pas

si no se compila con el modo Objfpc o delphi da error por el uso de Result

*)

var
v1,v2,v3,v4 : TAD;
pila : THeapStatus;
begin
mostar_heap();
SetLength(v1,5);
mostar_heap();

v1[0] := 'Aaaaaaaaa';
v1[1] := 'Bbbbbb';
v1[2] := 'Cccccccc';
v1[3] := 'Dddddddd';
v1[4] := 'Eeeeeee';


v2 := hacer_TAD('11111111','222222','33333');
mostar_heap();

v3 := hacer_TAD('----------','=====','#######');
mostar_heap();

v4 := TAD.create('uno','dos','tres','cuatro','cinco','seis','siete');
mostar_heap();
SetLength(v4,0);
mostar_heap();

writeln(v1[0]);
writeln(v1[4]);
writeln('=========================================');
writeln(v2[0]);
writeln(v2[1]);
writeln(v2[2]);
writeln('=========================================');
writeln(v3[0]);
writeln(v3[1]);
writeln(v3[2]);
writeln('=========================================');
mostar_heap();

//las siguientes lineas son las que producen el error:
//Runtime error 216 at $000000000041CE1B
//  $000000000041CE1B
//  $000000000040018F
// esto es por la llamada a SetLength en la línea 62
writeln(v4[0]);
writeln(v4[3]);
writeln(v4[6]);

end.




-- 
Rafael Bidegain

Ya que los cuerdos no hablan, hablará el loco.
(The Fool, Padraic Pearse)

# yo quiero educación libre. ¡YA!
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20160725/a0a599ed/attachment.html>


More information about the Lazarus-es mailing list