调用函数时,变量突然无缘无故地更改

Variable suddenly changes for no apparent reason when function is called

本文关键字:无缘无故 突然 变量 函数 调用      更新时间:2023-10-16

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

当我尝试获取数组的大小时,它会输出 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;
}

int numArr[] = {1,1};创建一个由两个整数组成的数组(它的类型实际上是int[2](,并且绝对不可能调整它的大小。写入索引 [2] 是在数组末尾写入,这是非法且未定义的行为。任何事情都可能发生。它可能会覆盖变量,可能会起作用,可能会崩溃,可能会删除您的个人文件,并且可能会在每次运行时切换其中的哪些文件。

首选使用std::vector<int>,这是可通过resize(...)方法调整大小的。您还需要通过引用传递此内容,以便每个函数调用修改同一实例,而不是创建副本并每个函数修改自己的本地副本。