記憶體分配失敗錯誤處理

2021-06-04 08:01:03 字數 888 閱讀 2284

一、c語言中的malloc/calloc/realloc/valloc/alloca/memalign函式:

這樣的記憶體分配函式在記憶體分配失敗時都返回空指標,因此,在呼叫返回時,檢查返回值的方法比較簡單,只需要與空指標比較即可;

如:char* p = (char*)malloc(1204);

if(p == null);

char* pp = (char*)calloc(3,1024);

if(pp == null);

二、c++中的new操作符:

c++中的new操作符在分配記憶體失敗時預設的操作是丟擲乙個內建的異常,而並不是直接返回空指標;這樣的話,再把返回值與空指標比較,就沒有什麼意義了;因為,c++丟擲異常之後,就直接跳出new操作符所在的那一行**,而不再執行後續的**行了,所以,對new操作符返回值的判斷**就執行不到了;當然,標準c++也提供了抑制丟擲異常的方法,使之不再排除記憶體分配失敗的異常,轉而直接返回空指標,這是因為比較古老的編譯器裡面可能沒有異常處理機制,不能捕獲到異常;如:

int* p = new int[size];

if(p == 0) //檢查p是否是空指標;這個判斷沒有意義;

所以,在c++中有兩種方法來處理new操作符分配記憶體失敗的錯誤;

1、通過捕獲new操作符丟擲的異常:

char* p = null;

trycatch(const std::bad_alloc& ex)

2、抑制異常的丟擲:

char* p = null;

p = new(std::nothrow)char[1024]; //這樣的話,如果new分配記憶體失敗,就不會再丟擲異常,而是返回空指標了;

if(p == null)                    //這樣的判斷就有意義了;

C 記憶體分配方式與錯誤處理方式

c 記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static 變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指...

Nginx啟動失敗的幾種錯誤處理

使用nginx做web伺服器過程中,碰到過以下幾個問題 1 nginx啟動失敗 systemctl start nginx.service 啟動nginx失敗,報錯資訊如下 starting nginx nginx emerg bind to 0.0.0.0 failed 13 permission...

MySql錯誤處理 錯誤處理的例子

有幾種錯誤處理的宣告形式 如果任何錯誤 不是 not found 設定 l error 為 1 後繼續執行 declare continue handler for sqlexception set l error 1 如果發生任何錯誤 不是 not found 執行 rollback和產生一條錯誤...