Run-time exceptions are errors that happen while the code is running and that can not be checked for at compile time.
Examples of run-time exceptions include an array index out of bounds, division by zero, and trying to use a pointer that
has not been initialized. The way exceptions can be handled is by enclosing the potential problem code within a
try block. If an exception occurs, then the program will immediately just to the catch
blocks that follow to find the first matching exception type. The catch block contains the error handling
code for that exception. If no matching catch block is found, or if there was no try block, then the function throws
an exception that travels back up the call chain. That means that the function that called it has the opportunity to
catch the exception. If nothing on the call stack catches the exception, the program crashes and deisplays an exception message.