簡體   English   中英

查找代碼中的邏輯缺陷或低效

[英]Find logical flaws or inefficiencies in code

我學習 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 ,包括
  • last小於startnew []的調用具有未定義的行為(無前提條件檢查)。

然而,最大的問題是邏輯問題:代碼計算startlast之間連續數字的總和,包括在內,這可以用算術級數總和的公式以封閉形式完成,完全不使用數組:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM