I'm trying to make a file system in C. I have trouble with this portion of my code when I'm printing my values in the code below:
for (int i = 0; i<NUM_POINTERS; i++) {
            printf("before SB->root[%d]=%d\n", i, SB->root->pointers[i]);
        }
        write_blocks(0, 1, SB);
        for (int i = 0; i<NUM_POINTERS; i++) {
            printf("after SB->root[%d]=%d\n", i, SB->root->pointers[i]);
        }
my write_blocks method:
    int write_blocks(int start_address, int nblocks, void *buffer)
{
    int i, e, s;
    e = 0;
    s = 0;
    void* blockWrite = (void*) malloc(BLOCK_SIZE);
    /*Checks that the data requested is within the range of addresses of the disk*/
    if (start_address + nblocks > MAX_BLOCK)
    {
        printf("out of bound error\n");
        return -1;
    }
    /*Goto where the data is to be written on the disk*/
    fseek(fp, start_address * BLOCK_SIZE, SEEK_SET);
    /*For every block requested*/        
    for (i = 0; i < nblocks; ++i)
    {
        /*Pause until the latency duration is elapsed*/
        usleep(L);
        memcpy(blockWrite, buffer+(i*BLOCK_SIZE), BLOCK_SIZE);
        fwrite(blockWrite, BLOCK_SIZE, 1, fp);
        fflush(fp);
        s++;
    }
    free(blockWrite);
    /*If no failure return the number of blocks written, else return the negative number of failures*/
    if (e == 0)
        return s;
    else
        return e;
}
And here's what gets printed:
before SB->root[0]=1
before SB->root[1]=2
before SB->root[2]=3
before SB->root[3]=4
before SB->root[4]=5
before SB->root[5]=6
before SB->root[6]=7
before SB->root[7]=8
before SB->root[8]=9
before SB->root[9]=10
before SB->root[10]=11
before SB->root[11]=12
before SB->root[12]=13
before SB->root[13]=14
after SB->root[0]=1234344888
after SB->root[1]=32688
after SB->root[2]=3
after SB->root[3]=4
after SB->root[4]=5
after SB->root[5]=6
after SB->root[6]=7
after SB->root[7]=8
after SB->root[8]=9
after SB->root[9]=10
after SB->root[10]=11
after SB->root[11]=12
after SB->root[12]=13
after SB->root[13]=14
I don't understand why my first and second pointer value change?
Some additional information: SB is a superBlock here's my structures:
    typedef struct iNode
{
    int id;
    int size;
    int pointers[NUM_POINTERS];
} iNode;
typedef struct superBlock
{
    int magic_number;
    int block_size;
    int num_blocks;
    int num_inodes;
    iNode *root;
    iNode jNodes[20];
} superBlock;
 
     
    