2014-11-21 12 views
0

저는 노드에서 노드로 데이터를 교환하는 기능을 사용하여 체스 게임에서 동작을 정렬하려고합니다. 내 비교자는 0,1,2를 반환 할 수있는 함수 "isCapture"입니다. 결국 나는 목록이 2222 ... 11111 ... 000이되기를 바란다. 내가 지금까지 가지고있는 코드는 이것이다 :C : 링크 된 목록을 정렬하면 무한 루프가 발생합니까?

void sort(move_t* head, game_t game) { 
move_t* move, *next; 
int x1,y1,x2,y2; 
char s; 
move = head; 

while(move != NULL) 
{ 
    next = move->next; 
    while(next != NULL) 
    { 
     if(((isCapture(game,move) == 0) && (isCapture(game,next)== 1)) || 
      ((isCapture(game,move) == 0) && (isCapture(game,next)== 2)) || 
       ((isCapture(game,move) == 1) && (isCapture(game,next)== 2))) 
     { 
      x1 = move->x1; 
      y1 = move->y1; 
      x2 = move->x2; 
      y2 = move->y2; 
      s = move->s; 
      move->x1 = next->x1; 
      move->y1 = next->y1; 
      move->x2 = next->x2; 
      move->y2 = next->y2; 
      move->s = next->s; 
      next->x1 = x1; 
      next->y1 = y1; 
      next->x2 = x2; 
      next->y2 = y2; 
      next->s = s; 
      if(isCapture(game,move) == 1) 
       next = next->next; 
      else 
      { 
       move = next; 
       next = next->next; 
      } 
     } 
     else if(((isCapture(game,move) == 2) && (isCapture(game,next)== 1)) || 
      ((isCapture(game,move) == 2) && (isCapture(game,next)== 2)) || 
      ((isCapture(game,move) == 2) && (isCapture(game,next)== 0))) 
     { 
      move = move-> next; 
      next = move-> next; 
     } 
     else 
     { 
      next = next->next; 
     } 
    } 
    move = move->next; 
} 
} 

나는 오류의 혼합물지고있어 : 무한 루프를 무효 다음 크기 (고속) 및 손상 연결리스트. 코드를 살펴 봤지만 알아낼 수는 없습니다. 누구든지 내 코드를 확인할 수 있으면 고맙겠습니다. 감사.

답변

0

내 빠른 추측은 링크 된 목록의 포인터를 NULL로 초기화하지 않아 초기화되지 않은 포인터 (및 일반적으로 값)의 기본값 인 가비지 값에서 무한 루프와 손상을 제공합니다.