I want to use a struct to contain some data and passing them between different functions in my program,this struct has to contain a dynamic 2D array (i need a matrix) the dimensions change depending on program arguments. So this is my struct :
    struct mystruct {
        int **my2darray;
    }
I have a function that read numbers from a file and has to assign each of them to a cell of the struct array.
I tried doing this :
    FILE *fp = fopen(filename, "r");
    int rows;
    int columns;
    struct mystruct *result = malloc(sizeof(struct mystruct));
    result->my2darray = malloc(sizeof(int)*rows); 
    int tmp[rows][columns];
    for(int i = 0;i<rows;i++) {
        for(int j = 0;j<columns;j++) {
            fscanf(fp, "%d", &tmp[i][j]); 
        }
        result->my2darray[i]=malloc(sizeof(int)*columns);
        memcpy(result->my2darray[i],tmp[i],sizeof(tmp[i]));
    }
But this is giving me a strange result : all the rows are correctly stored except for the first. (I'm sure that the problem is not in the scanning of file). While if i change the fourth line of code in this :
    result->my2darray = malloc(sizeof(int)*(rows+1)); 
it works fine. Now my question is why this happens?
 
     
     
     
    