Software model-checkers such as SLAM and BLAST are tools that automatically verify software. The success of these tools lies in the fact that they use symbolic methods, meaning that the program is represented in terms of logical formulas and the analysis of the program amounts to deductive reasoning over these formulas. Currently the applicability of software model-checkers is limited if a program manipulates heap-allocated data structures. These limitations become apparent, when the correct execution of the program depends on a data structure's shape. For instance, the termination of a program that traverses a recursive data structure might depend on the fact that this data structure forms a directed acyclic graph. Shape analysis is a technique that deals with the verification of such data structure properties. We introduce symbolic shape analysis. Symbolic shape analysis extends the capabilities of software-model checkers for programs with dynamic memory allocation.