【发布时间】:2019-05-23 05:58:28
【问题描述】:
我正在设置一个迭代函数,它调用另一个函数来进行一些微积分,然后在它最终收敛时找到值。但它卡在一个错误中,说这是一个分段错误(核心转储)。
这是我的代码:
#include <iostream>
#include <string>
#include <stdlib.h>
#include <cmath>
#include <stdio.h>
using namespace std;
double calcular(int numero)
{
return 1.0555 - (0.24366 * (numero - 0.0555) / (numero * (numero + 0.0555)));
}
double iterar(int hola)
{
if (abs(calcular(hola) - hola) > 0.002)
{
hola = calcular(hola);
iterar(hola);
}
else
return hola;
}
int main()
{
cout << iterar(1);
return 0;
}
【问题讨论】:
-
你反复调用
iterar,你得到了堆栈缓冲区溢出。 -
iterar(hola);->return iterar(hola); -
calcular(1)的结果大约是0.837。当您将该值分配给hola时,它将变为零(当您将浮点值截断为整数值时)。想想当你打电话给calcular(0)时会发生什么。并提示您自己弄清楚:Learn how to debug your programs!
标签: c++