計算需要刪除多少列才能使每一行在 C++ 中排序


C++ 程式的異常行為通常會導致程式崩潰。您可能遇到過段錯誤、中止、浮點異常等問題。以下是可能幫助您瞭解 C++ 程式崩潰原因的一些示例程式。

異常

C++ 中的異常是程式在遇到異常情況時的響應。如果這些異常沒有使用 try-catch 塊正確處理,則程式會因這些異常而崩潰。以下程式由於除以零異常而崩潰:

示例

#include <iostream>
int main(){
   int num1=10;
   int num2=0;
   int quotient=num1/num2;
   printf("\n Quotient is: %d",quotient);
   return 0;
}

輸出

Floating point exception (core dumped)

緩衝區溢位

緩衝區是一個臨時儲存區域。當程式向緩衝區寫入資料時超過緩衝區可容納的大小,額外的資料會超出緩衝區的邊界。資料會覆蓋到相鄰的記憶體位置。當輸入超過變數 num 可容納的大小時,以下程式的行為會發生改變。

示例

#include <iostream>
#include <string.h>
int main(){
   int num=100;
   std::cout<<"\nValue for num:"<<num;
   char c[2];
   strcpy(c,"abcdefghijklmnopqrstuvwxyz");
   std::cout<<"\nValue for c:"<<c;
   return 0;
}

輸出

Value for num:100
Segmentation fault (core dumped)

堆疊溢位

堆疊溢位問題發生在呼叫堆疊指標超過堆疊邊界時。堆疊包含有限的空間。當程式使用的空間超過堆疊上可用空間時,則稱堆疊溢位並導致程式崩潰。最常見的原因是無限遞迴。

以下程式包含對函式 factorial() 的無限次呼叫。在這種情況下,return 語句不正確。

示例

#include <iostream>
#include <string.h>
int factorial(int num){
   if(num==0)
      return 1;
   else
      return(factorial(num));
}
int main(){
    int n=10;
   int fact=factorial(n);
   std::cout<<fact;
}

輸出

Segmentation fault (core dumped)

段錯誤

段錯誤或核心轉儲發生在程式嘗試訪問不屬於它的記憶體位置時。在下面的程式中,指標 str 正在無限期地遞增和追加記憶體。

示例

#include <iostream>
int main(){
   char *str;
   char name[]="iostream";
   str=name;
   while(1)
      (*str++)='a';
}

輸出

Segmentation fault (core dumped)

記憶體洩漏

記憶體洩漏發生在動態分配的記憶體從未被釋放時。記憶體必須在不再使用時釋放。如果我們不斷地分配記憶體,那麼這些記憶體洩漏最終會隨著時間的推移而增加,並最終導致程式崩潰。如下所示的劣質程式碼的重複會導致記憶體洩漏:

示例

#include <iostream>
int main(){
    int *node;
   node = (int *) malloc(9999999);
   // free(node);
}

更新於:2020-7-28

67 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.