在调用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;
}
答案 0 :(得分:6)
int numArr[] = {1,1};
创建一个由两个整数组成的数组(其类型为int[2]
),并且绝对不可能调整其大小。写入索引[2]的操作超出了数组的末尾,这是非法且未定义的行为。什么都可能发生。它可能会覆盖变量,可能会工作,可能会崩溃,可能会擦除您的个人文件,并且可能会在每次运行时切换它们执行的操作。
首选使用std::vector<int>
方法可调整大小的resize(...)
。您还希望通过引用传递它,以便每个函数调用都修改相同的实例,而不是制作副本并分别修改自己的本地副本。