调用函数时,变量无明显原因突然改变

时间:2020-05-29 21:18:36

标签: c++

在调用fibonacciGenerator函数时,没有明显的原因,无论indexMax的原始值如何,变量indexMax都会更改为3。

当我尝试获取数组的大小时,它输出2。

int fibonacciGeneator(int arr[], int n_1, int n_2, int counter, int index){
    int x = counter;
    x--;
    int n = n_1+n_2;

    if(x > 0){
        arr[index] = n;
        return fibonacciGeneator(arr,n,n_1,x,index+1);
    }
    else{
        return arr[index] = n;
    }
}

int main()
{
    int numArr[] = {1,1};
    int indexMax = 5;

    cout << "Index: " << indexMax << endl;              // The variable indexMax changes value for no apparent reason.
    fibonacciGeneator(numArr,1,1,indexMax,2);
    cout << "Index: " << indexMax << endl;

    for(int i = 0; i < indexMax+2; i++){
        cout << numArr[i] << endl;
    }

    int arrSize = sizeof(numArr)/sizeof(numArr[0]); // Outputs 2 which might be due to the original array length of 2.
    cout << arrSize;

    return 0;
}

1 个答案:

答案 0 :(得分:6)

int numArr[] = {1,1};创建一个由两个整数组成的数组(其类型为int[2]),并且绝对不可能调整其大小。写入索引[2]的操作超出了数组的末尾,这是非法且未定义的行为。什么都可能发生。它可能会覆盖变量,可能会工作,可能会崩溃,可能会擦除您的个人文件,并且可能会在每次运行时切换它们执行的操作。

首选使用std::vector<int>方法可调整大小的resize(...)。您还希望通过引用传递它,以便每个函数调用都修改相同的实例,而不是制作副本并分别修改自己的本地副本。