c new失敗處理

2021-07-10 20:12:09 字數 705 閱讀 6408

在c語言中如果malloc/calloc分配記憶體失敗的時候,會返回乙個空指標,但是在c++中使用 new 分配記憶體的時候,標準規定new分配失敗時會丟擲異常,因此不能使用如下的方式判斷new是否成功,

int *p = new int[size];

if(null == p)

return;

如果分配失敗,則以上**將是沒有意義的,因為new失敗是會丟擲bad_alloc異常,會跳過後面的處理**,直到異常**捉。當然,可以使用設定nothrow的方式抑制異常的丟擲,如下:

int *p = new(std::nothrow) int[size];  //失敗不丟擲異常

if(null == p)

return;

對已new記憶體分配失敗應該採用以下方法:

方法1 捕獲異常:

tryint *p = new int[1000000];

catch(bad_alloc& e)

cerr<<"e.what()《方法2: 使用set_new_handler函式設定出錯處理函式,

void newhandler()

cerr<<"operator new fail"int main()

set_new_handler(newhandler);

int *pbig = new int[9999999];

//other

return 0;

C new 失敗的處理

我們都知道,使用 malloc calloc 等分配記憶體的函式時,一定要檢查其返回值是否為 空指標 亦即檢查分配記憶體的操作是否成功 這是良好的程式設計習慣,也是編寫可靠程式所必需的。但是,如果你簡單地把這一招應用到 new 上,那可就不一定正確了。我經常看到類似這樣的 int p new int...

C new失敗的處理

我們都知道,使用 malloc calloc 等分配記憶體的函式時,一定要檢查其返回值是否為 空指標 亦即檢查分配記憶體的操作是否成功 這是良好的程式設計習慣,也是編寫可靠程式所必需的。但是,如果你簡單地把這一招應用到 new 上,那可就不一定正確了。我經常看到類似這樣的 int p new int...

C new失敗的處理

我們都知道,使用 malloc calloc 等分配記憶體的函式時,一定要檢查其返回值是否為 空指標 亦即檢查分配記憶體的操作是否成功 這是良好的程式設計習慣,也是編寫可靠程式所必需的。但是,如 果你簡單地把這一招應用到 new 上,那可就不一定正確了。我經常看到類似這樣的 int p new in...