sandbox/bugs/LHydro_bug.c

    Minimal model for bug in multi-layer model

    This is not a bug, or rather it is a bug in your code. You are overwriting the pointer ‘H’ to a field you allocated (in out0) with an already allocated field (hl[0]). This causes the problem which you correctly describe below. The moral of the story is that you have to be careful when manipulating field pointers / lists.

    compile with qcc -autolink -g -lm -o LHydro_bug LHydro_bug.c Model crashes with segmentation fault. What I think happens is that at the end of event out0 the model deletes hl[0] as well as the scalar created in the event.

    Does not happen if layered/remap.h is not included Does not happen if the 2 lines in out0 are replaced by the commented out line

    #include "layered/hydro.h"
    #include "layered/remap.h"
    
    int main()
    {
      nl=2;
      init_grid (1 << 6);
      run();
    }
    
    event out0 (t = 0.)
    {
      scalar H[];
      H = hl[0];
      //scalar H = hl[0];
    }