Ошибка повреждения стека вокруг массива int в c ++

0

Я пытаюсь написать код c++, который является демонстрацией для формулы, но с использованием Recursion. Вот моя программа и ошибка, которую она бросает.

Окружающая среда - Visual Studio 2012
Компиляция - успешный
Исключение времени выполнения -
Ошибка проверки времени выполнения # 2 - Повреждение переменной "inputNumbers" было повреждено.

Код -

#include <stdlib.h>
#include <iostream>
using namespace std;


int FindNumber(int Numbers[],int index,int sum, int count)
{       

    if(count == 0)
        return sum;
    else if (count == 1)
    {
        sum -= Numbers[index-1];
        index = index -1;
        count = count-1;
        return sum = FindNumber(Numbers,index,sum,count);
    }
    else
    {
        sum += Numbers[index-1];
        index = index -1;
        count = count-1;
        return sum = FindNumber(Numbers,index,sum,count);
    }
}

void main()
{   
    int inputNumbers[50]; //declare the series of numbers
    int cnt = 0; //define and initailize an index counter for inserting the values in number series.
    int position = 7; //defines the position of the number in the series whose value we want to find.

    // insert the number series values in the int array.
    for (int i = 1; i < 51; i++)
    {
        inputNumbers[cnt] = i;
        cnt++;
        inputNumbers[cnt] = i;
        cnt++;
    }

    cnt=0;
    for (int i = 1; i < 51; i++)
    {
        cout<<inputNumbers[cnt]<<endl;
        cnt++;
        cout<<inputNumbers[cnt]<<endl;
        cnt++;
    }

    // set another counter variable to 3 since formula suggests that we need to substrat 3 times from the nth position
    // Formula : nth  = (n-1)th + (n-2)th - (n-3)th
    cnt = 3;
    int FoundNumber = 0;

    //Check if position to be found is greater than 3.
    if(position>3)
    {
        FoundNumber = FindNumber(inputNumbers,position,FoundNumber,cnt);
        cout<< "The number found is : " << FoundNumber<< endl;
    }
    else
    {
        cout<<"This program is only applicable for finding numbers of a position value greater than 3..."<<endl;        
    }

}

Вся программа работает идеально в соответствии с логикой, которую я ожидаю, и дает правильный результат, когда я отлаживаю ее, но бросаю исключение, выходя из main() после завершения выполнения.
Я вижу, что я делаю очень глупую, но сложную ошибку управления памятью [и не могу ее найти].
Любая помощь приветствуется.

  • 0
    Массивы в C ++ индексируются нулем
Теги:
memory-management
stack

2 ответа

3
Лучший ответ

Разве вы не заполняете в два раза больше размера массива здесь?

for (int i = 1; i < 51; i++)
{
    inputNumbers[cnt] = i;
    cnt++;
    inputNumbers[cnt] = i;
    cnt++;
}
  • 0
    пожалуйста, возьми пистолет и стреляй мне в голову ...! : /
1

Для массива длиной 50 вы не можете получить доступ к элементу 49; поэтому код должен выглядеть следующим образом:

int inputNumbers[50]; //declare the series of numbers
int cnt = 0; //define and initailize an index counter for inserting the values in number series.

// insert the number series values in the int array.
for (int i = 0; i < 50; i++)
{
    inputNumbers[cnt] = i;
    cnt++;
}

И действительно, как и в предыдущем ответе, вы, вероятно, хотите увеличивать cnt только один раз.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню