2013-04-14 3 views
-5

GCC 컴파일러에서 문자 당신은 배열 인덱스의 크기 후 메모리를 액세스하기 때문에 코드 분할 오류가 제공됩니다 라인 (17)없는 종단은> 라인 (17)

#include<stdio.h> 
void main() 
{ 
    int a[8]={4,9,15,20}; 
    int b[4]={3,5,10,13}; 
    int i,j,n=3; 
    for(i=0;i<=n;i++) 
    { 
     if(b[i]<a[i]) 
     { 
      for(j=n;j>=i;j--) 
      { 
       a[j+1]=a[j]; 
      } 
     a[i]=b[i]; 
     n=n+1; 
     } 
     else 
     { 
      for(j=n;j>=i;j--) 
      { 
       a[j+1]=a[j]; 
      } 
     a[i+1]=b[i]; 
     n++; 
     } 
    } 
    for(i=0;i<8;i++) 
    printf(" %d", a[i]); 
} 
+1

17 번 줄은 무엇입니까? 어떤 오류가 있습니까? – avakar

+0

문자가 없으면> 문자 – arj

+1

왜 오류를 수정합니까 ?? 찾을 수있는 코드에서 그런 오류가 없습니다 :) –

답변

0

에 오류가 있습니다.

if(b[i]<a[i]) 
{ 
    for(j=n;j>=i;j--) 
    { 
     a[j+1]=a[j]; 
    } 
    a[i]=b[i]; 
    n = n+1;   "<---- 1 Correction need here" 
    printf("In IF %d %d %d\n", i, j, n); 
} 
else 
{ 
    for(j=n;j>=i;j--) 
    { 
     a[j+1]=a[j]; 
    } 
    a[i+1]=b[i]; 
    n++;    "<----2 Correction need here" 
    printf("In Else %d %d %d\n", i, j, n); 
} 

출력은 다음과 같습니다 :

$ ./a.out 
In IF 0 -1 4 
In Else 1 0 5 
In Else 2 1 6 
In Else 3 2 7 
In Else 4 3 8  
In IF 5 4 9  
In IF 6 5 10  <-- i, j, n "buffer overflow" 
In IF 7 6 11  <-- i, j, n 
In IF 8 7 12  <-- i, j, n 
In IF 20 11 13  <-- i, j, n 
3 4 5 10 13 5 5 10 

제안에 당신에게 당신의 루프 변화 논리를 n을 변경하지 않는

는 단순히 n, i , j를 인쇄 할 수 코드에서이 개 좋아 추가를 디버깅하려면 이

+0

문제는 정렬 된 배열 a와 b를 정렬 된 순서로 병합하는 것입니다. – arj