計算需要刪除多少列才能使每一行在 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);
}
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP