안녕하세요?
정수형변수를 선언하고 for문에서 0으로 초기화를 시켜주었는데도
디버깅해보면 0값이 아닌 20102037이란 쓰레기값을 가지고 있어여
그래서 따로 loop := 0;라고 선언을 해줘도 그부분은 컴파일이 않되고
무시되는 듯한 느낌이 들어여?
소스입니다..
loop : integer;
for loop := 0 to 10 do
hsr/////////////////////////////////////////////////////////
버그는 아니구요 델파이 컴파일러의 특성인듯 합니다.
최적화로 사용치 않거나 정해진것은 변수로 처리하지 않고 간단이 기계어로 반복하게하는것 같군요 자세한건 모르겠지만요....
루프문안에서 해당 인자로 계산을하거나 조건문등으로 찾을때 디버깅시도 제대로 표현됩니다.
간단한 예로.
1.이건 n,i 둘다 디버깅시 꺼꾸로 나옵니다..컴파일러 특성 같아요
그러나 제대로 돕니다 10*10
procedure TForm1.Button2Click(Sender: TObject);
var
k, i,n : integer;
begin
K := 0;
for n := 0 to 10 do
for i := 0 to 10 do
inc(k);
showmessage(inttostr(k));
end;
2.아래건 n은 제대로 나옵니다, 이유는 바로 아래서 연산,조건인 for문이 있어서요
procedure TForm1.Button2Click(Sender: TObject);
var
k, i,n,a : integer;
begin
K := 0;
a:= 10;
for n := 0 to a do
for i := 0 to n do
inc(k);
showmessage(inttostr(k));
end;
3.아래 다나옵니다, 둘다 연산에 포함되므로
procedure TForm1.Button2Click(Sender: TObject);
var
k, i,n : integer;
begin
K := 0;
for n := 0 to 10 do
for i := 0 to 10 do
K := n+i;
showmessage(inttostr(k));
end;
따라서, 프로그램 도는건 지장이 없습니다, 다만 컴파일러의 최적화로
사용자에게 그건 몰라도,무시해도 되니 표시는 내맘대로다..라고 생각하시면 될겁니다.
for nLoop := 0 to 10 do
begin
if category = '' then
begin
중략..
end else
begin
indexloop := 0 <- 여기서도 초기화 않되고
for indexloop := 0 to 10 do <-여기서도 초기화 안되고
begin
if aryIndex[indexloop].name = 'lkh' then <- 여기서 쓰레기값..20102037
begin
중략..
end;
end;
end;
for문 전에는 쓴적이 없어요
선언하고 다음처럼 for문에서 쓴게 첨이거든요..
그리고 for문에서 0으로 초기화해주고 for문 안에서
aryIndex[loop]name ='lkh';
이렇게 쓰이는데 바로 저 aryIndex[loop]에서 loop값이
0이 아닌값이란 거거든요ㅡㅡ;;
for문 안에서 쓰신게 맞으신가요--.
아시고 계실 것으로 생각합니다만
for문 제어변수는 for문이 종료하고 나면 유효하지 않은 값을 가집니다.
그리고 for문 내부에서 그 제어변수가 실제로 사용되지 않으면
for문에 정의한 것과 다른 값을 가지게 됩니다.
아무래도...이것 때문에 질문하신것 같지 않지만--.
도움이 되셨길...
버그는 아니구요 델파이 컴파일러의 특성인듯 합니다.
최적화로 사용치 않거나 정해진것은 변수로 처리하지 않고 간단이 기계어로 반복하게하는것 같군요 자세한건 모르겠지만요....
루프문안에서 해당 인자로 계산을하거나 조건문등으로 찾을때 디버깅시도 제대로 표현됩니다.
간단한 예로.
1.이건 n,i 둘다 디버깅시 꺼꾸로 나옵니다..컴파일러 특성 같아요
그러나 제대로 돕니다 10*10
procedure TForm1.Button2Click(Sender: TObject);
var
k, i,n : integer;
begin
K := 0;
for n := 0 to 10 do
for i := 0 to 10 do
inc(k);
showmessage(inttostr(k));
end;
2.아래건 n은 제대로 나옵니다, 이유는 바로 아래서 연산,조건인 for문이 있어서요
procedure TForm1.Button2Click(Sender: TObject);
var
k, i,n,a : integer;
begin
K := 0;
a:= 10;
for n := 0 to a do
for i := 0 to n do
inc(k);
showmessage(inttostr(k));
end;
3.아래 다나옵니다, 둘다 연산에 포함되므로
procedure TForm1.Button2Click(Sender: TObject);
var
k, i,n : integer;
begin
K := 0;
for n := 0 to 10 do
for i := 0 to 10 do
K := n+i;
showmessage(inttostr(k));
end;
따라서, 프로그램 도는건 지장이 없습니다, 다만 컴파일러의 최적화로
사용자에게 그건 몰라도,무시해도 되니 표시는 내맘대로다..라고 생각하시면 될겁니다.