On 15 nov 2005, at 17:11, Luis Del Aguila wrote:
Somebody can help me. I do not understand, that I am making bad. The program is: Program ProbandoMemoria; {$R+} Var PLPunteros: ^Pointer; NuevoTamanio : integer; elementos : longint; x,b : ^integer; Begin elementos := 3; NuevoTamanio:=Sizeof(Pointer)*elementos; ReallocMem(PlPunteros,NuevoTamanio); Writeln('Direccion : ',longint(Plpunteros) ); new(x); x^:=7; Plpunteros^:=x; b:=Plpunteros^; Writeln('Direccion : ',longint(b),' valor : ',b^); new(x); x^:=15; (Plpunteros+4)^:=x;
In this statement (and several next ones) you are writing past the memory allocated for Plpunteros. Adding a value to a pointer, increases the value of said pointer by this value times the size of the elements the pointer points to. Since Plpunteros = ^Pointer, the above writes X to the address "pointer(plpunteros)+4*sizeof(pointer)".
What you want is "(Plpunteros+1)^:=x;". Or, if you are in fpc or objfpc mode, you can also use "plpunteros[1]:=x;"
b:=(Plpunteros+4)^; Writeln('Direccion : ',longint(b),' valor : ',b^); new(x); x^:=25; (Plpunteros+8)^:=x; b:=(Plpunteros+8)^; Writeln('Direccion : ',longint(b),' valor : ',b^); //This I do not understand. //Why ' b^ ' does not have the 7?
Probably because one of the previous out-of-bounds writes overwrote the value.
Jonas _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal