Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-05-2015
doctorhd doctorhd is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 48
Poder: 0
doctorhd Va por buen camino
Asignar memoria

Holas, tengo la siguiente duda, he creado un record con la siguiente estructura:
Código Delphi [-]
type
    TClaveValor = record
    private
      FClave:string;
      FValueDefault:Variant;
      FValue:Variant;
      FTipo:TEnumTypeData;
      procedure SetClave(const Value:string);
      procedure SetValueDefault(const Value:variant);
      procedure SetValue(const Value:variant);
      procedure SetTipo(const Value:TEnumTypeData);
    public
      property Clave: string read FClave write SetClave;
      property ValueDefault: Variant read FValueDefault write SetValueDefault;
      property Value:Variant read FValue write SetValue;
      property Tipo: TEnumTypeData read FTipo write SetTipo;
    end;
A su vez he creado un tipo que apunta a dicho record:
Código Delphi [-]
type PClaveValor = ^TClaveValor;{Puntero a TClaveValor}
Estas estructuras las utilizo para crear elementos en otra clase:
Código Delphi [-]
type ArrayPClaveValor = array of PClaveValor;{array de punteros a PClaveValor}

type
    TParamRegWin = class
    private
      FParams:ArrayPClaveValor;
      function getParam(const Index: Integer): PClaveValor;
      procedure setParam(const Index: Integer; const Value: PClaveValor);
      function getCount:Integer;
      ....
    public
      constructor Create;
      destructor Destroy; override;
      procedure AddParam(const AClave:string; const AValueDefault:Variant;AValue:Variant; const ATipo:TEnumTypeData);
      ....
    public
      property Param[const Index: Integer]:PClaveValor read getParam write setParam;
      property Params:ArrayPClaveValor read FParams write FParams;
      property Count:Integer read getCount;
    end;
El problema se suscita al crear un nuevo elemento, el cual lo realizo en el procedure AddParam:
Código Delphi [-]
procedure TParamRegWin.AddParam(const AClave:string; const AValueDefault:Variant;AValue:Variant; const ATipo:TEnumTypeData);
  var vElementos:integer; vPParam:PClaveValor;
  begin
    vElementos:=Length(FParams);
    Setlength(FParams,vElementos+1);{Dimencionamos el tamaño de la lista de campos}
    New(vPParam);
    vPParam.Clave:=AClave;
    vPParam.ValueDefault:=AValueDefault;
    vPParam.Value:=AValue;
    vPParam.Tipo:=ATipo;
    FParams[vElementos]:=vPParam;
  end;{procedure}
Como veran utilizo el comando NEW para asignar la memoria al nuevo objeto, el cual cumple su función, pero antes de llegar a utilizar New utilice:
Código Delphi [-]
vPParam:=System.AllocMem(SizeOf(TClaveData));
Pero su utilización hacia que se borrara parte del contenido de variables que no participaban dentro del procedure, también probé:
Código Delphi [-]
GetMen(vPParam,SizeOf(TClaveData));
Pero también tuve problemas, en la asignación de los valores al puntero.
Mi pregunta es AllocMem y GetMen hacen asignación de memoria disponible o asignan memoria de la que primero encuentran, ya que de acuerdo a las pruebas realizadas, ambos métodos interfieren con la memoria utilizada por otras variables o componentes asignados con anterioridad....Y por ultimo que diferencia existe entre estos dos métodos y el comando NEW...

Saludos....
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Asignar Evento AndyLupa Varios 4 17-06-2011 18:54:53
¿Asignar memoria dinámica a TFrame? Ledian_Fdez OOP 5 30-11-2010 22:26:10
asignar Memoria dinamica a un programa kurono Varios 2 28-12-2009 22:46:10
Asignar un dbgrid yhoda SQL 5 15-05-2007 21:02:44
Asignar maskedit soloriv Varios 2 28-07-2005 17:29:48


La franja horaria es GMT +2. Ahora son las 04:48:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi