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