调用函数时,变量突然无缘无故地更改
Variable suddenly changes for no apparent reason when function is called
无论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(...)
方法调整大小的。您还需要通过引用传递此内容,以便每个函数调用修改同一实例,而不是创建副本并每个函数修改自己的本地副本。
相关文章:
- MPI突然停止了对多个核心的操作
- 当我使用CHAR_INFO结构时,控制台会无缘无故地改变颜色
- 调用函数时,变量突然无缘无故地更改
- 无缘无故地抛出实例
- DirectX 11 引擎在第三次代码改进后没有突然运行,我不知道为什么
- C++网络,recv() 无缘无故失败 (?)
- 我一直得到'std::invalid_argument'什么():似乎无缘无故地抛出 stoi 异常?
- STL 向量无缘无故损坏,VC++ 2017
- 此数组中的某些值无缘无故变为零 (0)
- 正则表达式代码无缘无故停止工作
- 链接时突然收到maxrregcount警告和未定义的引用错误
- Arduino函数无缘无故地更改参数
- 当存在空单元格时,用于 c++ 的 Tsv 文件解析器会突然结束
- 使用指针的法律遗留代码突然变成了 UB
- 变量无缘无故地更改了他的地址
- C++程序无缘无故结束?(哈希表)
- 我的矢量突然停止有什么问题?
- C++ - 线程参数无缘无故增加
- GTK图像突然不会刷新任何错误或警告
- 助推::绑定生病了,无缘无故地抱怨