【发布时间】:2016-07-16 00:44:39
【问题描述】:
这是我从程序中提取的有问题的代码块:
#include <vector>
using namespace std;
vector<double> permittingConstructionCosts(56);
static const int PERMITTING_PERIODS = 0;
static const int CONSTRUCTION_PERIODS = 11;
static const double CONSTRUCTION_COSTS = 2169506;
static const double PERMITTING_COSTS = 142085;
static const int PERMITTING_CONSTRUCTION_PERIODS = PERMITTING_PERIODS + CONSTRUCTION_PERIODS;
void calcExpenses // Calculates permitting and construction expenses
(
vector<double>& expense,
double value1,
double value2
)
{
int i;
for (i=0; i<=PERMITTING_PERIODS + 1; i++)
{
expense[i] = value1;
}
for (i=PERMITTING_PERIODS + 2; i<expense.size(); i++)
{
if (i < PERMITTING_CONSTRUCTION_PERIODS + 2)
{
expense[i] = value2;
}
}
}
int main()
{
if (PERMITTING_PERIODS != 0)
{
calcExpenses(permittingConstructionCosts, -PERMITTING_COSTS/PERMITTING_PERIODS, -CONSTRUCTION_COSTS/CONSTRUCTION_PERIODS);
}
else
{
calcExpenses(permittingConstructionCosts, 0, -CONSTRUCTION_COSTS/CONSTRUCTION_PERIODS);
}
return 0;
}
根据 ideone (http://ideone.com/LpzUny) 的说法,代码存在运行时错误,返回“时间:0 内存:3456 信号:11”。
我试图在 SO 上寻找解决方案并找到以下链接:
How can I avoid a warning about division-by-zero in this template code?
How to eliminate "divide by 0" error in template code
但是,我不知道如何使用模板,因为我是 c++ 新手,我不确定在这种情况下是否需要使用它们,所以我不知道如何使这些解决方案适应我的特定问题甚至可能。
我很确定“-PERMITTING_COSTS/PERMITTING_PERIODS”会导致问题,但我认为只需检查除数就可以解决问题。此函数似乎适用于除 0 以外的所有其他值,但我需要考虑 PERMITTING_PERIODS = 0 的情况。
如果能得到任何帮助,我将不胜感激。提前致谢!
编辑:我实际上确实在我的程序中初始化了向量,但我忘了把它放进去,因为大小是在程序的其他地方决定的。一旦我通过输入一个数字来修复该部分,代码块就可以工作,但是当我将 PERMITTING_PERIODS 设置为 0 时,我的程序仍然存在运行时错误,所以我想我必须在其他地方寻找错误。感谢您的帮助!
【问题讨论】:
标签: c++ c++11 vector segmentation-fault runtime-error