2016-07-09 5 views
0

온라인 판사에게 다음 기능을 구현하는 동안 이중 자유 또는 손상 (! prev) 오류가 발생합니다.C에서 이중 자유 또는 손상 (! prev) 오류

void nextPermutation(int* A, int n1) 
{ 
    int i = 0; 
    int tmp = 0; 
    int flag = 0; 
    int ret = 0; 

    if(n1 == 1) 
     return A[0]; 

    for(i = n1; i > 0; i--) 
    { 
     if(flag == 0) 
     { 
      if(A[i] > A[i - 1]) 
      { 
       tmp  = A[i]; 
       A[i]  = A[i - 1]; 
       A[i - 1] = tmp; 
       flag  = 1; 
       ret  = i; 
       break; 
      } 
     } 
    } 

    for(i = ret; i < n1 - 1; i++) 
    { 
     if(A[i] > A[i + 1]) 
      tmp = A[i]; 

     A[i]  = A[i + 1]; 
     A[i + 1] = tmp; 
    } 
} 

그러나 맞춤 입력을 사용하여 코드를 테스트하면 정상적으로 작동합니다. 아무도 왜이 일이 일어날 지 말해 줄 수 있습니까?

+1

함수의 반환 유형이 void이고 첫 번째 조건 인 경우 A [0]을 반환합니다. – denis

+3

두 번째'for' 루프에서 3 개의 모든 과제가'if'의 일부가되어야합니까? 중괄호를 사용하지 않았으므로 첫 번째 행만'if'에 있습니다. – Barmar

+0

전화를 거는 곳의 코드를 게시 할 수 있습니까? – denis

답변

4

이 코드에서 int * A의 크기는 얼마입니까? 첫 번째 for 루프에서 (n1-1)을 사용하여 i를 초기화해야한다고 생각합니다.

for(i=(n1-1);i>0;i--) 

A [i-1]이 루프에서 평가되므로 i> 0의 조건은 괜찮은 것처럼 보입니다.

malloc을 사용하여 int *에 메모리를 할당해야한다고 생각합니다. 또한 위의 주석에서 A [0]을 반환 할 수 없습니다.

관련 문제