找出代码中的逻辑缺陷或效率低下

时间:2016-04-19 16:43:44

标签: c++ logic

我学习c ++,我有这样的练习:

查找此代码中的逻辑缺陷或效率低下。

我发现两个for语句效率低下。 但我觉得存在更多的问题点。 帮我看看他们在哪里。

int Sum(int start, int last) {
 int* a = new int[last - start];
 int sum = 0;

 for (int i = start; i <= last; ++i) {
     a[i] = i;
 }

 for (int i = start; i <= last; ++i) {
     sum += a[i];
 }
 return sum;
}

1 个答案:

答案 0 :(得分:0)

此代码存在多个编码问题:

  • 它分配一个新数组,但永远不会释放它(内存泄漏)
  • 它没有为数组分配足够的内存(last - start应该是last - start + 1
  • 它将数组从start索引到last,包括它,应该将其从0索引到last - start,包括
  • last小于start时,new []的调用具有未定义的行为(无先决条件检查)。

然而,最大的问题是逻辑问题:代码计算startlast之间的连续数字的总和,包括在内,这可以用封闭的形式完成,其中包含总和的公式arithmetic progression,根本不使用数组:

int Sum(int start, int last) {
    return (last - start + 1)*(last + start) / 2;
}