2011-12-02 37 views
4

我想要做一些模擬和數學操作,這些操作是高度遞歸的,在某些邊緣情況下,我溢出了調用堆棧並獲得EXC_BAD_ACCESS信號。將算法更改爲迭代形式是不可行的,因爲它是很多遺留代碼。遞歸深度限制不會有用,因爲內存的使用是非確定性的。如何在EXC_BAD_ACCESS遞歸算法保護IOS

有沒有辦法來檢測可用堆棧的數量,所以我可以優雅地取消操作?

是否有可能實現一種類型的堆疊金絲雀,我可以連續檢查未被覆蓋?

+0

你有沒有想過呢,因爲我有同樣的問題,不知道如何解決它 – Levi

回答

0

如果線程安全不是問題,請使用靜態變量。事情是這樣的:

int recurse(int something) { 
    static int depth = 0; 
    ++depth; 
    if (depth > MAX_DEPTH) { // bail } 

    ... 
    int result = recurse(...); 
    --depth; 
    return result; 
} 

如果線程安全是一個問題,你可以通過depth作爲參數。