Run-Time Check Failure #2 - Stack around the variable 'arr' was corrupted

#include <iostream>
#include <ctime>

int gcd(int value1, int value2)
{
    while (value1 != 0 && value2 != 0) 
    {
        if (value1 > value2)
            value1 = value1 - value2;
        else
            value2 = value2 - value1;
    }
    return value1 + value2;
}

void input_arr(int arr[], const int size) 
{
    srand(time(nullptr));
    //int temp = 0;
    for (int i = 0; i <= size; i++) 
    {
        //std::cout << "Input array, index " << i << ": ";
        //std::cin >> temp;
        //if (temp > 0) 
            //arr[i] = temp;
        //else 
        //{
        //  std::cout << "Input value <= 0.";
        //  i--;
        //}
        arr[i] = rand();
    }
}

int main()
{
    while (true)
    {
        const int size = 27;
        int arr[size];
        input_arr(arr, size);
        int nod = 0; 
        int min = gcd(arr[0], arr[1]);
        int value1 = 0, value2 = 0, index1 = 0, index2 = 0;
        for (int i = 0; i <= size; i++)
        {
            if (i != size)
                nod = gcd(arr[i], arr[i + 1]);
            if (nod < min)
            {
                min = nod;
                index1 = i;
                index2 = i + 1;
                value1 = arr[i];
                value2 = arr[i + 1];
            }
        }
        if (index1 != 0 && index2 != 0)
        {
            std::cout << "GCD(" << value1 << ", " << value2 << ")" << " = " << min;
            std::cout << " Index = " << index1 << ", " << index2 << std::endl;
        }
        else 
        {
            std::cout << "GCD does not exist.";
        }
        break;
    }
}

За массив вроде не вылезаю, а всё равно есть проблема.


Ответы (1 шт):

Автор решения: AlexGlebe

В массивах индексация от [ 0 .. size-1 ]. А вы портите память arr [ size ].

Цикл в input_arr нужно уменьшить до :

for (int i = 0; i < size; i++)

а в main ещё меньше :

for (int i = 0; i < size-1; i++)
→ Ссылка