2014-10-06 6 views
-2

코드는 :이 코드가 segfault를 생성하는 이유는 무엇입니까?

#include <iostream> 
using namespace std; 

void mix(int *a, int *b, int *c, int m, int n) 
{ 
    int i, j = 0; 
    for(i = 0; i < m; i++) 
    { 
     if(a[i] % 2 == 0) 
     { 
      c[j] = a[i]; 
      j++; 
     } 
    } 
    for(i = m - 1; i >= 0; i++) 
    { 
     if(a[i] % 2 == 1) 
     { 
      c[j] = a[i]; 
      j++; 
     } 
    } 
    for(i = 0; i < n; i++) 
    { 
     if(b[i] % 2 == 0) 
     { 
      c[j] = b[i]; 
      j++; 
     } 
    } 
    for(i = n - 1; i >= 0; i++) 
    { 
     if(b[i] % 2 == 1) 
     { 
      c[j] = b[i]; 
      j++; 
     } 
    } 
    cout << j << ' '; 
} 

int main() 
{ 
    int a[10], b[10], c[20], m, n; 
    cout << "m: "; 
    cin >> m; 
    cout << "\nn: "; 
    cin >> n; 
    int i; 
    for(i = 0; i < m; i++) 
    { 
     cin >> a[i]; 
    } 
    for(i = 0; i < n; i++) 
    { 
     cin >> b[i]; 
    } 
    mix(a, b, c, m, n); 
    for(i = 0; i < (m+n); i++) 
    { 
     cout << c[i]; 
    } 
    return 0; 
} 

나는 확인하고 내 배열의 크기를 재 점검하고 코드가 mix(...) 기능에 세그먼트 폴트를 생산 왜 알아낼 수 없습니다했습니다. -O2 최적화를 사용하는 데 문제가 될 수 있습니까? 또한, 인덱스가 일치하는지 확인했습니다. 나는이 문제가 c[j] = a[i]과 같다고 생각하지만 왜 이것이이 세분화 오류를 일으키는 지 이해할 수 없다. 이 두 루프

+3

i++을하고 있었습니까? –

+2

'for (i = m - 1; i> = 0; i ++)'는 의심스러워 보입니다. 그게 무슨 뜻이야? – TNA

+0

예제 입력 및 예상 출력 표시 –

답변

5

대신 i-- 당신이 그것을 디버깅 할 때 어떻게됩니까

for(i = m - 1; i >= 0; i--) 
    { 
     if(a[i] % 2 == 1) 
     { 
      c[j] = a[i]; 
      j++; 
     } 
    } 

for(i = n - 1; i >= 0; i--) 
{ 
    if(b[i] % 2 == 1) 
    { 
     c[j] = b[i]; 
     j++; 
    } 
} 
+0

> - <감사합니다, 나는 그 후에 바보 같이 느껴집니다! – shortstheory

관련 문제