Q&A

  • [질문]pointer 값을 변경하고 싶은데요...
여러가지 record 형태의 변수를 list형태로 추가, 삭제하는 class를 제작중입니다.
포인터를 이용하는데 제가 포인터를 잘못 이해하고 있는건지, 함수를 잘못 알고 있는건지
제가 생각했던 것과 다른 결과가 나오네요....
잘못된 부분을 알려주시면 감사하겠습니다..

호출 부분
var
    LCUValue : LCUValuePacket;
    i: Integer;
    tmp : Pointer;
begin
    for i := 0 to 10 do
    begin
        FillChar(LCUValue, sizeof(LCUValue), 0);
        LCUValue.Channel := i;
        LCUValueList.AddData(@LCUValue);
    end;

    for i := 0 to 10 do
    begin

        tmp := @LCUValue;
        LCUValueList.GetData(i, tmp);  //<-- 이부분에서 문제
        Memo1.Lines.Add(IntToStr(LCUValue.Channel));
    end;


리스트 클래스 부분
<!--CodeS-->

procedure ThList.AddData(Adata: Pointer);
begin
    cs.Enter;
    setlength(data, List.Count + 1);
//    GetMem(data[List.Count], fSize);
    data[List.Count] := GetMemory(fSize);
    Move(Adata, data[List.count]^, fSize);
    List.Add(data[List.count]);
    cs.Leave;
end;

procedure ThList.Getdata(i: integer; var Adata);
var
    k : integer;
    temp , ret: Pointer;
    temp2 : Pointer;
begin
    cs.Enter;
    if( (i >= 0) and (i < List.Count) ) then
    begin
        temp := @Adata;
        temp2 := List.Items[i];
        Move(temp2^, AData, fSize);
    end;
    cs.Leave;
end;
<!--CodeE-->
1  COMMENTS
  • Profile
    최용일 2010.05.28 20:38
    코드만 보고 정확히 이해하기는 힘들지만... 클래스부분에서 아래와 같이 고쳐야 할 것 같군요.
    Move(Adata, data[List.count]^, fSize);
    -->
    Move(Adata^, data[List.count]^, fSize);

    Move(temp2^, AData, fSize);
    -->
    Move(temp2^, AData^, fSize);