Q&A

  • 배열~ 동적배열... 사이즈(Length) 바꾸기~!!!
동적 배열을 사용하였습니다.



type

TXTempA = Array of Integer;

TYTempA = Array of Integer;

TXXA = Array of Integer;

TYYA = Array of Integer;

TFrmMain = class(TForm)



이케 하구선 모든 변수를 전역변수로 선언했습니다.



implementation



{$R *.DFM}



// First Date 2001,01,29



var

XTempA: TXTempA;

YTempA: TYTempA;

XXA: TXXA;

YYA: TYYA;

AX, AY, BX, BY, CX, CY, DX, DY, EX, EY : Integer;

XTemp, YTemp: Integer;

XStruc, YStruc: Integer;

XCnt, YCnt, Cnt: Integer;

XX, YY: Integer;



폼 엑티브 이벤트에



SetLength(XTempA,1);

SetLength(YTempA,1);

SetLength(XXA,1);

SetLength(YYA,1);



이케 했구여 책보니 copy로 하면 사이즈를 바꿀수 있다구 해서...

버튼 클릭 이벤트에서



Copy(XTempA,1,Cnt);

Copy(YTempA,1,Cnt);

Copy(XXA,1,Cnt);

Copy(YYA,1,Cnt);



이렇게 사이즈를 변경하게 해봤는데요... Cnt는 버튼을 누를때마다

하나씩 올라가는 카운트에요.





이렇게 해서 사용하는데요 처음부분은 몇번... 잘돼다가 에러가 나요

' Access violation at Address 004dc6in Module 'Project1.exe'. Read of address ffffffe8'

이런 에러가... ^^;



아시는 분~ 바루 답글 남겨주세여 ^^



1  COMMENTS
  • Profile
    손용석 2001.01.31 02:20
    아래내용은 제가 가지고 있는 FAQ플그램내에 있는 내용입니다.



    저도 같은 문제로... ㅜ.ㅜ;



    ////////////////////////////////////////////////////////////////////////////////

    파스칼(pascal)에서는 비동적 배열의 크기를 재 설정할 수 없습니다. 그러나, 동적으로 생성된 배열의 크기는 재 설정할 수 있습니다. 이와 같이 하기위해서는 배열의 범위를 설정을 하지 말고 배열의 요소를 변수(variable)를 통해서만 얻어와야 한다. 배열을 포인터 변수를 통해 얻어온다면, 다음과 같은 순서로 배열의 크기를 재설정하는 것처럼 할 수 있다. 즉, 새로운 배열 설정, 기존 배열의 모든 요소를 새로운 배열에 복사, 기존 배열을 메모리에서 삭제, 새로운 배열의 포인터를 기존 배열의 포인터로 설정. 이와같은 순서로 배열의 크기를 재 설정할 수 있다.



    < 예제 >

    type

    TSomeArrayElement = integer;

    PSomeArray = ^TSomeArray;

    TSomeArray = array[0..0] of TSomeArrayElement;



    procedure CreateArray(var TheArray : PSomeArray; NumElements : longint);

    begin

    GetMem(TheArray, sizeof(TSomeArrayElement) * NumElements);

    end;



    procedure FreeArray(var TheArray : PSomeArray; NumElements : longint);

    begin

    FreeMem(TheArray, sizeof(TSomeArrayElement) * NumElements);

    end;



    procedure ReSizeArray(var TheArray : PSomeArray; OldNumElements : longint; NewNumElements : longint);

    var

    ThenewArray : PSomeArray;

    begin

    GetMem(ThenewArray, sizeof(TSomeArrayElement) * NewNumElements);

    if NewNumElements > OldNumElements then

    Move(TheArray^, ThenewArray^, OldNumElements * sizeof(TSomeArrayElement)) else

    Move(TheArray^, ThenewArray^, NewNumElements * sizeof(TSomeArrayElement));

    FreeMem(TheArray, sizeof(TSomeArrayElement) * OldNumElements);

    TheArray := ThenewArray;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    p : PSomeArray;

    i : integer;

    begin

    {$IFOPT R+}

    {$DEFINE CKRANGE}

    {$R-}

    {$ENDIF}



    CreateArray(p, 200);

    for i := 0 to 199 do

    p^[i] := i;

    ResizeArray(p, 200, 400);

    for i := 0 to 399 do

    p^[i] := i;

    ResizeArray(p, 400, 50);

    for i := 0 to 49 do

    p^[i] := i;

    FreeArray(p, 50);



    {$IFDEF CKRANGE}

    {$UNDEF CKRANGE}

    {$R+}

    {$ENDIF}

    end;

    ////////////////////////////////////////////////////////////////////////////////





    많은 도움이 되셨으면 좋겠네여~~!!



    그럼 ^.^;





    명지니 wrote:

    > 동적 배열을 사용하였습니다.

    >

    > type

    > TXTempA = Array of Integer;

    > TYTempA = Array of Integer;

    > TXXA = Array of Integer;

    > TYYA = Array of Integer;

    > TFrmMain = class(TForm)

    >

    > 이케 하구선 모든 변수를 전역변수로 선언했습니다.

    >

    > implementation

    >

    > {$R *.DFM}

    >

    > // First Date 2001,01,29

    >

    > var

    > XTempA: TXTempA;

    > YTempA: TYTempA;

    > XXA: TXXA;

    > YYA: TYYA;

    > AX, AY, BX, BY, CX, CY, DX, DY, EX, EY : Integer;

    > XTemp, YTemp: Integer;

    > XStruc, YStruc: Integer;

    > XCnt, YCnt, Cnt: Integer;

    > XX, YY: Integer;

    >

    > 폼 엑티브 이벤트에

    >

    > SetLength(XTempA,1);

    > SetLength(YTempA,1);

    > SetLength(XXA,1);

    > SetLength(YYA,1);

    >

    > 이케 했구여 책보니 copy로 하면 사이즈를 바꿀수 있다구 해서...

    > 버튼 클릭 이벤트에서

    >

    > Copy(XTempA,1,Cnt);

    > Copy(YTempA,1,Cnt);

    > Copy(XXA,1,Cnt);

    > Copy(YYA,1,Cnt);

    >

    > 이렇게 사이즈를 변경하게 해봤는데요... Cnt는 버튼을 누를때마다

    > 하나씩 올라가는 카운트에요.

    >

    >

    > 이렇게 해서 사용하는데요 처음부분은 몇번... 잘돼다가 에러가 나요

    > ' Access violation at Address 004dc6in Module 'Project1.exe'. Read of address ffffffe8'

    > 이런 에러가... ^^;

    >

    > 아시는 분~ 바루 답글 남겨주세여 ^^

    >

    • 손용석
      2001.01.31 01:16
      DataBase1.Params.Values['DATABASE NAME'] := 'Z:DB_____.MDB' 이런식이죠!! 도움이 되었으면 좋겠...
    • 호야
      2001.01.31 18:35
      손용석 wrote: > > DataBase1.Params.Values['DATABASE NAME'] := 'Z:DB_____.MDB' > > 이런식이죠!!...
    • 성더기
      2001.01.31 22:01
      vender init어쩌구 하는 에러의 대부분은... Oracle에 path가 안걸려 있거나 BDE의 VENDER INIT에 있는 DL...
    • 초보자
      2001.02.01 08:52
      성더기 wrote: > vender init어쩌구 하는 에러의 대부분은... > Oracle에 path가 안걸려 있거나 BDE의 VE...
    • 아폴론
      2001.01.31 01:36
      안녕하세요 오라클을 PC와 연결 하셨다니 축하드립니다. 매우 어렵던데... 오라클과 텔과의 연결은..음 ...
    • 방기남
      2001.01.31 00:28
      같은 상황일 것 같지만 환경이 다를수도 있으니 정답이 아닐수도 있습니다. 저 같은 경우엔 SERVER...
    • 과객
    • 2001.01.31 00:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 손용석
      2001.01.31 02:06
      컴포넌트 하나 소개하겠습니다...!! 'Async'라고 RS-232C 통신을 할때 쓸만 하더군요..?! 저는 RS-23...
    • 명지니
    • 2001.01.30 23:50
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 손용석
      2001.01.31 02:20
      아래내용은 제가 가지고 있는 FAQ플그램내에 있는 내용입니다. 저도 같은 문제로... ㅜ.ㅜ; ////////...
    • 김범수
    • 2001.01.30 23:21
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 뿌요
      2001.01.31 18:37
      ..
    • 망치
      2001.01.30 23:53
      김범수 wrote: > 1.테이블 : 부서코드 부서명 : bu_name > 적정인원:bu_to >...
    • 공성환
      2001.01.30 23:47
      SELECT A.BU_NAME, SUM(B.inwonto), SUM(B.bu_num ), SUM(B.over ) FROM 부...
    • 김범수
      2001.01.31 00:06
      답변감사합니다. 출력필드에 부서명(a.bu_name), 적정인원(a.bu_to),부서인원(이부분은 count(*) group by...
    • 공성환
      2001.01.31 02:15
      작성하신 sql문을 적어주시는게 이해가 잘될것같네요... 머리가 나빠서리.... 김범수 wrote: > 답변감...
    • moon
    • 2001.01.30 22:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 투덜이
      2001.01.30 23:34
      폼의 Object Inspector에 보시면 Anchors라는 Property가 있습니다. 거기서 고정여부를 True, False로 적...
    • aha
    • 2001.01.30 22:58
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 액션가면
      2001.01.31 00:18
      안녕하세여~ 인터베이스라고 유달리 다른 DB는 아니구여 파라독스나 SQL-SERVER, Oracle등과 별 차이...
    • aha
      2001.01.31 02:09
      안녕하세요 아하입니다. 답변에 감사드립니다. by the way, 델코에 인터베이스 설치에 관한 메뉴얼이...
    • 최경훈
    • 2001.01.30 22:43
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 2001.01.31 02:08
      음.. 혹 도움이 될까해서 답변을 드립니다. DLL을 작성하실때 'DWORD' type을 사용하지 마시고 (Power Bu...
    • ^^
      2001.01.31 08:35
      희 wrote: > 음.. > 혹 도움이 될까해서 답변을 드립니다. > DLL을 작성하실때 'DWORD' type을 사용하지...
    • 컴사랑
    • 2001.01.30 21:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 델피언.......
      2001.01.30 23:07
      컴사랑 wrote: > ip가 없는 로컬 db(MSSQL DB)에 다른 컴퓨터를 연결하려고 합니다. > > 즉 하나의 프...
    • 강정한
    • 2001.01.30 21:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 망치
      2001.01.31 00:59
      강정한 wrote: > 제가 사용하는 환경은 오라클입니다. > 특정테이블이 있는데, 여기엔 프라이머키로 잡은...
    • 김석경
    • 2001.01.30 20:38
    • 3 COMMENTS
    • /
    • 0 LIKES
    • hobakpa
      2001.01.30 20:46
      김석경 wrote: > 델파이에서 스토어드 프로시져를 연결해서 ms-sql의 storedprocedure를 실행하는데 > 아...
    • 김석경
      2001.01.30 20:51
      hobakpa wrote: > 김석경 wrote: > > 델파이에서 스토어드 프로시져를 연결해서 ms-sql의 storedprocedur...
    • hobakpa
      2001.01.30 21:16
      > 파라미터 타입은 전부 input으로 주고 데이타 타입은 string으로 주었지요. > 근데 select, delete하는 ...