for구문인데 무한루프에 빠진다.

    for(i=0;i<200;i++){
        printf("%d th iteration \n", iteration++);
        linmin(band, xi);
       
        if(2.0*fabs(fret-fp)<ftol*(fabs(fret+fabs(fp)+__EPSILON__))){
            break;
        }
        fp=NEBpotential(band);
        xi = NEBforce(band);
        gg=0.0;
        dgg=0.0;
        for(i=0;i<__DISCRETIZE__+1;i++){
            for(j=0;j<__DIM__;j++){
                gg+=g[i][j]*g[i][j];
                dgg = (xi[i][j]+g[i][j])*xi[i][j];
            }
        }
        gam=gg/dgg;
        if(gg==0.0){
            break;
        }
        for(i=0;i<__DISCRETIZE__+1;i++){
            for(j=0;j<__DIM__;j++){
                g[i][j] = -xi[i][j];
                h[i][j] = g[i][j]+gam*h[i][j];
                xi[i][j] = h[i][j];
            }
        }
    }

분명히 괄호도 잘 막았고 for구문 쓰는 법도 맞았는데...
어디서 틀린거지 -_-;
C언어 쓰다가 이런 경우는 처음이다.

추가 - for문 안에 for문을 또 쓸때 인덱스로 들어간 i를 같은걸 쓰는 바람에 이런 비극이 벌어졌다. -_-; 바보.
신고
by snowall 2010.07.31 11:34
  • 핑구야 날자 2010.07.31 14:08 신고 ADDR EDIT/DEL REPLY

    간혹 그렇게 되는 경우가 있지요 예전에 터보C를 썼어지요.. 지금은 VB를 쓴답니다.

    • snowall 2010.07.31 14:23 신고 EDIT/DEL

      지금은 VB와 C를 둘 다 씁니다. VB는 업무용, C는 학습용이죠. VC++로 GUI를 하려고 생각하니 좌절스러워서 GUI프로그램은 다 VB로 하고 있네요 -_-;

  • goldenbug 2010.07.31 23:16 신고 ADDR EDIT/DEL REPLY

    속의 for문을 {}활호로 둘러싸면 괜찮아지지 않을까요? ㅎㅎㅎㅎ

    • snowall 2010.07.31 23:55 신고 EDIT/DEL

      그 안에서 int i;를 다시 선언하면 되긴 하는데요, 그냥 인덱스 바꿔줬습니다 ㅋ

  • 구차니 2010.08.02 14:57 신고 ADDR EDIT/DEL REPLY

    내 머리속에 버그.txt
    변수를 재활용하는게 꼭 좋지만은 않더라구요.

    그래서 저는 재활용 변수는 temp로 시작하고
    저런 인덱스용 변수는 아예 독립을 시켜놔요 ㅠ.ㅠ


티스토리 툴바