Q&A

  • [질문] 배열에 데이터를 넣을때 누락되거나 중복됩니다.

입력된 데이터입니다.

최종결과도 아래 순서로 나와야 합니다.
'0001' '홍길동1'
'0002' '홍길동2'
'0003' '홍길동3'
'0004' '홍길동4'

그렇지만
배열에 들어간 결과입니다.
'0003' '홍길동3'
'0004' '홍길동4'
'0003' '홍길동3'
'0004' '홍길동4'

디버그를 걸어보면 아래와 같습니다.

1번째 디버깅시 : '0001' '홍길동1' <-- 정상

 

2번째 디버깅시 : '0001' '홍길동1' <-- 정상
                              '0002' '홍길동2' <-- 정상

 

3번째 디버깅시 : '0003' '홍길동3' <-- 여기부터 이상하게 들어갑니다.
                              '0002' '홍길동2'
                              '0003' '홍길동3'

 

4번째 디버깅시 : '0003' '홍길동3'
                              '0004' '홍길동4'
                              '0003' '홍길동3'
                              '0004' '홍길동4'

소스입니다.

type
ParmArray = Array of PChar;

function Member_Search_Name_Array( MemberName : PChar ) : ParmArray; stdcall; export;
var
RecordNum : Integer;
RecordCnt : Integer;

begin

     RecordCnt := Fields[12].AsInteger;
     SetLength( Result, RecordCnt );

     while not Eof do
          begin
            for RecordNum :=  0 to  RecordCnt - 1 do
              begin
                Result[ RecordNum ] :=  PChar(  FormatFloat( '0000', RecordNum  + 1  )  + ' , '  +
                                                Fields[00].AsString + ' , ' +
                                                Fields[01].AsString + ' , ' +
                                                Fields[02].AsString + ' , ' +
                                                Fields[03].AsString + ' , ' +
                                                Copy(Fields[04].AsString, 8,  7 ) + ' , ' +
                                                Fields[05].AsString + ' , ' +
                                                Fields[06].AsString + ' , ' +
                                                Fields[07].AsString + ' , ' +
                                                Fields[08].AsString + ' , ' +
                                                Fields[09].AsString + ' , ' +
                                                Fields[10].AsString + ' , ' +
                                                Fields[11].AsString );

                ShowMessage(  Result[ RecordNum ] );
                Next;
                Application.ProcessMessages;
              end;
      end; // while-end
end;

2  COMMENTS
  • Profile
    미스터큐 2013.01.18 22:25

    StrNew가 빠진듯 합니다.

    StrNew(PChar(FormatFloat(... 같이 해보세요

    물론 어딘가에 StrDispose도 넣어줘야 합니다.

  • Profile
    cdrd 2013.01.22 09:10

    답변에 감사드립니다.

    이 방법으로 적용해봐야 겠습니다.

    메모리 할당이나 초기화부분에 문제가 있는거 같습니다.

  • profile cdrd
    2013/01/12 02:22
  • Views1351
    Likes0
    Comments2
    Reports0
  • Tag List
  • 목록으로