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



我学习 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;
}

此代码有多个编码问题:

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

但是,最大的问题是逻辑问题:代码计算 startlast 之间的连续数字之和,包括,这可以通过算术级数总和的公式以封闭形式完成,该公式根本不使用数组:

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

最新更新