I have a recursive function in a BaseClass
which relies on a protected virtual
function for it's return condition.
It's possible for a child class to override this function incorrectly and leads to a StackOverFlow
exception. The worst thing is there are some slow network calls and the exception is not gonna happen soon (many resources waste for a long time).
I'm looking for a method to check StackOverFlow
in early stages some way in the base class (maybe using Reflection
and the current recursion level).
Any idea ?
You could pass a simple integer 'depth' to the recursive function and increment it with each subsequent call. If it gets larger than the maximum allowed depth throw an Exception right then instead of waiting until it's too late and the dreaded StackOverflow
exception has occurred.
Such safety mechanisms (increment counter, check it's not stupidly large) can also be handy in while
loops where a small error can cause an infinite loop consuming vast quantities of CPU.
In large systems with many users (e.g. web sites) sometimes it's best to take precautionary measures like these with recursion and while loops because the consequences can reach far beyond one web page or one user of the system. It's not pretty code and the purists will no doubt balk at it, but it's efficient, it's defensive and it's pragmatic.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With