2013-12-10 2 views
0

채울 때 코드가 깨지기 시작합니다 days[]; ratio2[]을 채울 때도 깨집니다. 모든 배열은 main()으로 선언되고 MAX으로 초기화되며 전역 정의에서 50으로 정의됩니다. 각 색인에 값을 저장 한 다음 인쇄해야합니다.배열 채우기 (액세스 위반 작성 위치 0x00000000)

void getdata(ifstream &inFile, int id[], int days[], double ratio2[], double estmax_heart[], double ratio[], double avg[]) 
{ 
    int i; int j = 0; 
    int num; 
    double largest = 0; 
    int n = 0; 

    int max_heart = 0; int age = 0; 
    double avg_comm_rate = 0; 
    double maxcomm_rate = 0; 
    double exc_rate = 0; 
    double sum = 0; 


    while (! inFile.eof()) 
    {  
     inFile >> id[n]; 
     cout << id[n] << " "; 

     inFile >> max_heart; 
     cout << max_heart << " "; 

     inFile >> age; 
     cout << age << " " << endl; 

     estmax_heart[n] = 220-age; 

     ratio[n] = (max_heart/estmax_heart[n]) * 100; 

     days = 0; largest = 0; sum = 0; ratio2 = 0; j = 0; 

     for (i = 0; i < 5; i++) 
     { 
      inFile >> avg_comm_rate; 
      cout << avg_comm_rate << " "; 

      inFile >> maxcomm_rate; 
      cout << maxcomm_rate << " "; 

      inFile >> exc_rate; 
      cout << exc_rate << endl; 

      if (exc_rate != 0) 
      { 
       days[i] = j + 1;   
      } 

      if(maxcomm_rate > largest) 
      { 
       largest = maxcomm_rate; 
      } 

      sum = sum + avg_comm_rate; 

      ratio2[i] = (largest/max_heart) * 100; 
     } 

     n++;  

     calculate(i, days, sum, avg_comm_rate, maxcomm_rate, exc_rate, avg, largest, estmax_heart, ratio, ratio2); 

     system("pause"); 

     //cout << sum; 
    } 

    inFile.close(); 

    return; 

} 
+0

, int로 '라고 차이가 없다 [η]'및 'INT * A' - 당신이 통과하면에 상기 어레이의 첫번째 엘리먼트에 대한 포인터 중 케이스. 따라서 대개 포인터 구문을 사용하는 것이 가장 좋습니다. 포인터 구문은 사용자가 처리하는 대상을 명확하게 나타내며 이와 같은 실수를 방지하는 데 도움이됩니다. 물론 C++에서는 어쨌든 C 배열을 사용할 필요가 거의 없습니다.'std :: vector'와'std :: array'는 사용하기 쉽고 오류가 발생하기 쉽고 효율성도 떨어집니다. –

답변

6

배열 포인터를 액세스하기 전에 0에 할당했기 때문입니다.

C 및 C++ 함수의 파라미터로서
days = 0; largest = 0; sum = 0; ratio2 = 0; j = 0; 
관련 문제