Почему эта переменная, которую я вместо этого инициализирую нулем, составляет 4 миллиона? - PullRequest
0 голосов
/ 10 апреля 2020

C newb ie здесь. Частью лабораторного задания является отладка следующего кода. Вместо ожидаемого результата 30 (сумма квадратов 0, 1, 2, 3 и 4), он дает результат где-то между 32 794 и 32 797. Благодаря использованию отладчика в функции sumValues ​​переменная ii на первой итерации превышает 4 миллиона, и я действительно не уверен, почему. Держу пари, это что-то про процессы инициализации C:

#include <stdio.h>

int sumValues(int v[], int length);

int main(void)
{
   int val[5], n;
   for (n = 0; n < 5; n++)
      val[n] = n * n;

   printf("the sum of entered values is %d", sumValues(val, 5)
   return 0; 
}

int sumValues(int a[], int size)
{
   int sum, ii;
   sum = 0;
   ii  = 0;

   for (ii = 0; ii <= size; ii++)
      sum += a[ii];

   return sum; 
}

(Как обычно, понимание очевидной вещи, которую я не могу найти, очень ценится. Спасибо!)

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

В sumValues измените:

for (ii = 0; ii <= size; ii++)

на:

for (ii = 0; ii < size; ii++)

Он просматривает записи массива «один-слишком-много», поэтому он выбирает значение мусора.

1 голос
/ 10 апреля 2020

Непостоянная ошибка:

   for (ii = 0; ii <= size; ii++)

Вместо этого вы хотите:

   for (ii = 0; ii < size; ii++)

«Дополнительный» элемент, который вы читали за пределами, оказался действительно большое число.

...