Static analysis analyzes source code without executing it. It can find syntax errors, dead code, undefined variables, and array bound violations. However, memory leaks are dynamic run-time anomalies that static analysis cannot reliably identify, requiring dynamic execution to detect accurately.