在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...