Q&A

  • for 루프안에서 아주 이상하네여
아래의 코드인데요.

이코드땜시 잘못된 연산수행한다고 나오면서 종료되거든요.

for루프의 값이 이상한 값이 나오네요



var

listCnt : integer;

i : integer;

begin



listCnt := ListView_NLHost.Items.Count;



for i := 0 o listCnt do

begin

TempString:=ListView_NLHost.Items[i].SubItems[1];

end;



이구문인데 . I값과 listCnt값이 이상한 값이 들어가네요.

처음에는 i값이 0이고 listCnt값이 5라면.

두번째에는 i값이 954323 과 listCnt값이 954322등이상한 값이

들어가서 에러가 나네여. ?

아시는 분은 답변을 부탁드립니다.

3  COMMENTS
  • Profile
    최원실 2000.02.08 20:31
    정종구 wrote:

    > 아래의 코드인데요.

    > 이코드땜시 잘못된 연산수행한다고 나오면서 종료되거든요.

    > for루프의 값이 이상한 값이 나오네요

    >

    > var

    > listCnt : integer;

    > i : integer;

    > begin

    >

    > listCnt := ListView_NLHost.Items.Count;

    >

    > for i := 0 o listCnt do

    > begin

    > TempString:=ListView_NLHost.Items[i].SubItems[1];

    > end;

    >

    > 이구문인데 . I값과 listCnt값이 이상한 값이 들어가네요.

    > 처음에는 i값이 0이고 listCnt값이 5라면.

    > 두번째에는 i값이 954323 과 listCnt값이 954322등이상한 값이

    > 들어가서 에러가 나네여. ?

    > 아시는 분은 답변을 부탁드립니다.



    변수의 초기화를 해보세요.

  • Profile
    배불뚝 2000.02.08 20:28
    정종구 wrote:

    > 아래의 코드인데요.

    > 이코드땜시 잘못된 연산수행한다고 나오면서 종료되거든요.

    > for루프의 값이 이상한 값이 나오네요

    >

    > var

    > listCnt : integer;

    > i : integer;

    > begin

    >

    > listCnt := ListView_NLHost.Items.Count;

    >

    > for i := 0 o listCnt do

    > begin

    > TempString:=ListView_NLHost.Items[i].SubItems[1];

    > end;

    >

    > 이구문인데 . I값과 listCnt값이 이상한 값이 들어가네요.

    > 처음에는 i값이 0이고 listCnt값이 5라면.

    > 두번째에는 i값이 954323 과 listCnt값이 954322등이상한 값이

    > 들어가서 에러가 나네여. ?

    > 아시는 분은 답변을 부탁드립니다.



    안녕하세요..

    i 에 이상한 값이 들어간 것은 subitems이 존재하지 않는 item에 대해 subitems을 접근해서 listindex is out of bound 에러가 난 후에 이상한 값이 들어간 것입니다.

    따라서 그 item의 subitem이 존재하는가를 먼저 확인한 후에 접근해야 합니다.



    listCnt := ListView_NLHost.Items.Count;



    for i := 0 to listCnt - 1 do //초기값이 0 이므로 '카운트 - 1'까지

    begin

    if ListView_NLHost.Items[i].subitems.Count > 0 then

    //그 item이 subitems을 가지고 있을때만

    TempString:=ListView_NLHost.Items[i].SubItems[1];

    end;



    좋은 하루 되세요.







  • Profile
    정종구 2000.02.08 23:27
    > 정종구 wrote:

    > > 아래의 코드인데요.

    > > 이코드땜시 잘못된 연산수행한다고 나오면서 종료되거든요.

    > > for루프의 값이 이상한 값이 나오네요

    > >

    > > var

    > > listCnt : integer;

    > > i : integer;

    > > begin

    > >

    > > listCnt := ListView_NLHost.Items.Count;

    > >

    > > for i := 0 o listCnt do

    > > begin

    > > TempString:=ListView_NLHost.Items[i].SubItems[1];

    > > end;

    > >

    > > 이구문인데 . I값과 listCnt값이 이상한 값이 들어가네요.

    > > 처음에는 i값이 0이고 listCnt값이 5라면.

    > > 두번째에는 i값이 954323 과 listCnt값이 954322등이상한 값이

    > > 들어가서 에러가 나네여. ?

    > > 아시는 분은 답변을 부탁드립니다.

    >

    아.. 답변감사드립니다.

    코드에는 문제가 없구요.. 초기화라든가 카운트에 관계된것은 정상이거든요.

    문제가.. 컴파일러 최적화 옵션이였습니다.

    최적화 옵션을 끄고 하니깐. 정상적으로 동작합니다.