Combining Symbolic Execution and Search-Based Testing for Programs with Complex Heap Inputs