I have a 1 dimensional array in which ive initialized as 0 but for some reason when i go inside a loop and try to increase its contents by one the value at position 0 keeps reverting to 0 even after i increase it by 1.
#include <stdio.h>
#include <stdlib.h>
#define TOTAL_V 3
#define NUM_CANDIDATES 7
int hex_age(unsigned short hex){
    unsigned short age = hex >> 9;
    if (age >18 && age <101)
        return age;
    else return 0;
}
int hex_gender(unsigned short hex){
    unsigned short gender = hex >> 7 & 3;
    return gender;
}
int hex_vote(unsigned short hex){
    unsigned short vote, tmp = hex & 0x7f , count = 0;
    if (tmp == 0)
        return 7;
    for (int i = 0 ; i<7; i++){
        if (tmp & 1 == 1){
            count++;
            vote = i;
        }
        tmp = tmp >> 1;
    }
    if (count > 1)
        return 7;
    return vote;
}
    
int main() {
    int s_votes = 0, f_votes = 0, v_count[NUM_CANDIDATES] = {0};
    unsigned short **v_info, hex_v_info , age , gender , vote;
    FILE *fp;
    fp = fopen("data1.dat" , "r");
    if (fp == NULL){
        fprintf(stderr ,"apotuxe o anoigmos tou arxeiou");
        exit(-1);
    }
    if (feof(fp)){
        fprintf(stderr, "to arxeio einai adeio");
        exit(-1);
    }
    
    while (fscanf(fp ,"%x", &hex_v_info) != EOF){
        age = hex_age(hex_v_info);
        if(age == 0)
            f_votes++;
        else {
            gender = hex_gender(hex_v_info);
            if (gender == 0)
                f_votes++;
            else{
                vote = hex_vote(hex_v_info);
                if (vote == 7)
                    f_votes++;
                else{
                    if (s_votes == 0){
                            v_info = malloc(sizeof(int *));
                            v_info[s_votes] =malloc(sizeof(int)* TOTAL_V);
                    }
                    else{
                        v_info = realloc(v_info , sizeof(int *)*(s_votes+1));
                        v_info[s_votes] = malloc(sizeof(int)*TOTAL_V);
                    }
                    v_info[s_votes][0] = age;
                    v_info[s_votes][1] = gender;
                    v_info[s_votes][2] = vote;
                    v_count[vote]++;
                    s_votes++;
                    }
                }
            }
    }
    fclose(fp);
    for (int i = 0; i<s_votes; i++)
        free(v_info);
    return 0;
}
and for some reason when i use calloc to create the array it doesnt have that problem. Does anyone know why that happens
 
    