2013-10-20 3 views
0

I 나 함수를 호출 INT의 동적 배열을 생성하고, 알고리즘C++ 동적 배열 초기화 충돌

MAIN.CPP

... 
int main(void){ 

    srand((long) 1234567); 

    callFunction1(); 

    return 0; 

} 

와 그 배열을 작성 다음 코드가 functions.h

... 
    int *A; 
    int N; 

    //prototype 
    void callFunction2(); 

    void callFunction1(){ 

     int choice; 
     cin >> choice; 

     while (choice != 2){ 

       callFunction2(); 

       cin >> choice; 
     } 

    } 

    void callFunction2(){ 

     cout << "Enter array size" << endl; 
     cin >> N; 

     A = new int[N]; 
     A[0] = 0; 
     A[1] = 1; 

     for (int i=2;i<=N;i++){ 
      A[i] = A[i-1] + A[i-2]; 
     } 

    } 

그래서 위의 코드는 시간이 있지만, 일부 대부분의 시간을 작동합니다 배열을 초기화하는 줄에서 충돌합니다.

A = new int [N];

이 문제의 원인은 무엇입니까?

+0

"배열"에 한계가 있습니다. – chris

+0

N보다 작거나 같은 숫자를 입력하거나 배열을 할당하는 것이 사용 가능한 메모리 (메모리 조각화 가능성이 있음)보다 많은 메모리를 소비하는 N 값을 입력하십시오. – elgonzo

답변

4

여기서 범위 외인 A 액세스된다

for (int i=2;i<=N;i++){ 
     A[i] = .... 

A범위 [0, N)에N-1까지 0에서 인덱싱 될 수있다.

+0

그게 뭔지 그게 ... Αi = Ai-1 + Ai-2 for i = 2 ... n – fxuser

+0

@fxuser 그리고 잘못되어 세분화 위반이 발생할 수 있습니다. 그러니 고쳐주세요. 방금 게시 한 식과 배열의 인덱스를 구별해야합니다. – juanchopanza

+0

@fxuser for 루프의 조건을 'i juanchopanza

1

또한 callFunction2에서 메모리 누수가 발생했습니다.

+0

끝에 배열을 삭제하는 것을 잊었 기 때문에? – fxuser

+0

맞습니다. 새로운 [] 일 때 delete []를 부르는 것을 잊지 마십시오. – TheSOFan