We present a novel, sound, and complete algorithm for deciding safety properties in programs with static memory allocation. The new algorithm extends the program verification paradigm using loop invariants presented in [1] with a counterexample guided abstraction refinement (CEGAR) loop [2] where the refinement is achieved by strengthening loop invariants using the QF BV generalization of Property Directed Reachability (PDR) discussed in [3,4]. We compare the algorithm with other approaches to program verification and report experimental results.