freeTwice Trace summary:

Step 1: State 0 -- freeTwice.c line 6 [main@0->main@1] "p = (double*)malloc(sizeof(double));" -> State 1
Step 2: State 1 -- freeTwice.c line 7 [main@1->main@2] "free(p);" -> State 2
Step 3: State 2 -- freeTwice.c line 8 [main@2->main@3] "free(p);"

freeTwice Trace details:

begin state 0
  save = true
  onStack = true;
  seen = true;
  pathCondition : true
  begin model state
    begin shared variables
    end shared variables;
    begin process 0
      begin stack frame 0
        function : main;
        location : 0;
        p = undefined (Ref[real]);
      end stack frame 0;
    end process 0;
  end model state
end state 0.

Step 1: State 0 -- freeTwice.c line 6 [main@0->main@1] "p = (double*)malloc(sizeof(double));" -> State 1

begin state 1
  save = false
  onStack = true;
  seen = true;
  pathCondition : SIZEOF_TYPE(3) + -1 >= 0
  begin model state
    begin shared variables
    end shared variables;
    begin process 0
      begin heap variables
        __heap_0_0 = m0p0h0 (real[1]);
      end heap variables;
      begin stack frame 0
        function : main;
        location : 1;
        p = &__heap_0_0[0] (Ref[real]);
      end stack frame 0;
    end process 0;
  end model state
end state 1.

Step 2: State 1 -- freeTwice.c line 7 [main@1->main@2] "free(p);" -> State 2

begin state 2
  save = false
  onStack = true;
  seen = true;
  pathCondition : SIZEOF_TYPE(3) + -1 >= 0
  begin model state
    begin shared variables
    end shared variables;
    begin process 0
      begin stack frame 0
        function : main;
        location : 2;
        p = undefined (Ref[real]);
      end stack frame 0;
    end process 0;
  end model state
end state 2.

Step 3: State 2 -- freeTwice.c line 8 [main@2->main@3] "free(p);"
