我試圖安全地從預計發生的分段錯誤中恢復。我試圖避免使用我的canAlloc()函數在這裏檢查。當canAllow返回false時,A0(如果你沒有看到它,就是Ackermann的)應該拋出一個我可以在主要方法中捕獲的異常。 checkTable和saveInTable都是使用map<int hash, int value>
存儲A0返回的函數。在C++中使用C動態內存函數以避免分段錯誤
bool canAlloc(){
bool reBool = false;
int * memch = (int*)calloc (10000, sizeof(int));
reBool = (memch != NULL);
free(memch);
return reBool;
}
int A0(int m, int n){
if(!canAlloc()) throw;
int reInt = checkReturnTable(m,n);
if(reInt == -1){
if(m == 0){
return n + 1;
} else if(m > 0){
if(n == 0){
reInt = A0(m-1,1);
} else if(n > 0){
reInt = A0(m-1, A0(m,n-1));
}
}
saveInReturnTable(m,n,reInt);
return reInt;
} else return reInt;
}
從評論:
在主要我有一個try-catch塊捕捉任何異常
try{} catch(...){}
。據我瞭解,這三個時期應該會引發任何異常。據我所知,throw
關鍵字拋出沒有任何說明符的異常,但仍然可以被三個點捕獲。
「'throw'」?這又是什麼語言? – cnicutar
我不明白你的問題。那裏的支票並沒有告訴你很多。您可以在一個時間點分配一些內存並不意味着您可以在不同的時間點分配內存。 – johannes
'扔'什麼? :) –