Q&A

  • if 문과 nil 관련 질문드려요.
좋은 아침이죠^^*. 초보하나예요.
아무리 매뉴얼을 봐도 이해가 가질 않는 부분과 찾을수 없는 부분이 있어서 이렇게 질문드려요.

<!--CodeS-->

Var
    i : Interger;
    gcodeTemp : String;

    for ....

          // 목적: loop 배열값의 존재여부 파악.
          // 조건1: 존재하지 않을 경우 -1 값이 부여됨.
          // 조건2: 존재할 경우 해당배열의 번호값이 부여됨.
          i :=Memo1.Lines.IndexOf(gcodeTemp);

          if (i = -1) then
            memo1.Lines.Add(gcodeTemp)
          else if (i <> -1) then begin
            showMessage(' 추출 대상이 존재하지 않습니다. ');
            break;
          end;

          i := nil;

    end;

<!--CodeE-->

for loop 를 돌면서 gcodeTemp 라는 배열값을 가져와서 memo1 에 존재하는지 여부를 확인하고 있을 없을 경우(i=-1) memo1 에 값을 삽입하고, 아닐 경우 메세지를 출력하고 루프를 멈추는 조건이구요.

그 후 해당 i 의 값을 해제해주려고 하는데 두가지다 비정상적으로 작동을 하거든요.

너무 황당하신가요?? 다른 프로그래밍 할때하고 너무 다른 조건은 아니라고 생각하는데 조금 다르게 반응을 해서 어떻게 하여야 할지 도무지 모르겠거든요.

변수형별로 nil 사용방법 좀 가르쳐주세요...찾아도 없더라구요. ㅠ.ㅡ;;;

아참 루프를 돌려서 나오는 값을 보니까요.
바로 이전 로프의 값을 i 가 갖고 있었어요.

답변 부탁드립니다...
4  COMMENTS
  • Profile
    모영철 2006.12.29 19:45
    i를 널로 만드시는게 어떤 이유인지는 모르겠지만.
    메모리 해제를 위해서인가요?

    그냥 지역변수로 잡혀 있는거면 i를 더 쓸일이 없다면 아무작업도 하지 않으셔도 됩니다.

    i := nil;

    이건 그냥 빼시면 될거 같구요..

    nil은 포인터형에 쓰입니다.

  • Profile
    이하나 2006.12.29 20:19

    먼저 답변 감사드려요.^^*;;

    포인터형만 nil 이 가능하단 말씀이시군요. 더 공부를 해야겠네요 ㅠ.ㅠ

    for 루프 내부에서 if 조건이 전혀먹지를 않거든요.
    그래서 gcodeTemp 값과 i 값을 메모리에서 해재하려고 하는데 이론상으로 불가능하다면 안되겠죠.

    i 는 조건에 false 일 경우 값이 -1 이고, true 일 경우 indexOf 값을 반환을 하는데요.
    그 부분에서 if 조건에 대입을 어떻게 하는지 너무 답답합니다.

    델파이 왜케 어려워요 ㅠ.ㅠ

    책에 아무리 찾아도 안나와용 ㅠ.ㅠ;;;
  • Profile
    최용일 2006.12.29 23:39
    안녕하세요. 최용일입니다.

    i나 gcodeTemp같은 값들은 루프가 끝나면 자동으로 없어집니다. 해제에 신경쓰시지 마세요.

    아마도 i가 루프변수일듯한데요 (for i := ....) 되도록이면 루프변수를 다른 용도로 사용하지 마세요.

    변수하나 더 선언하셔서 그걸이용해서 -1이나 Index를 반환하도록 해보세요...

    ^^ 항상 즐코하세요...

  • Profile
    이하나 2006.12.30 19:39
    오늘도 여지없이 출근을 했지만, 여러 선배님들의 열정에 찬사를 보냅니다.

    새해 복 많이 받으시고, 건승하는 2007년 되세요.^^*