C new失敗的處理

2021-06-16 21:18:53 字數 831 閱讀 1240

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

int* p = new int[size];

if ( p == 0 ) // 檢查 p 是否空指標

return -1;

// 其它**

其實,這裡的 if ( p == 0 ) 完全是沒啥意義的。c++ 裡,如果 new 分配記憶體失敗,預設是丟擲異常的。所以,如果分配成功,p == 0 就絕對不會成立;而如果分配失敗了,也不會執行 if ( p == 0 ),因為分配失敗時,new 就會丟擲異常跳過後面的**。如果你想檢查 new 是否成功,應該捕捉異常

try catch ( const bad_alloc& e )

據說一些老的編譯器裡,new 如果分配記憶體失敗,是不丟擲異常的(大概是因為那時 c++ 還沒加入異常機制),而是和 malloc 一樣,返回空指標。不過我從來都沒遇到過 new 返回空指標的情況。

當然,標準 c++ 亦提供了乙個方法來抑制 new 丟擲異常,而返回空指標:

int* p = new (std::nothrow) int; // 這樣如果 new 失敗了,就不會丟擲異常,而是返回空指標

if ( p == 0 ) // 如此這般,這個判斷就有意義了

return -1;

注:文章摘抄自bellgrade的空間

c new失敗處理

在c語言中如果malloc calloc分配記憶體失敗的時候,會返回乙個空指標,但是在 中使用 new 分配記憶體的時候,標準規定new分配失敗時會丟擲異常,因此不能使用如下的方式判斷new是否成功,int p new int size if null p return 如果分配失敗,則以上 將是沒...

C new 失敗的處理

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

C new失敗的處理

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