I'm trying to use realloc function in C, to dynamically operate on a char array of strings (char**). I usually get a realloc():invalid old size error after 41st cicle of the for loop and I really can't understand why. So, thanks to everyone who will help me ^-^
[EDIT] I'm trying to make the post more clear and following your advices, as a "new active member" of this community, so thank you all!
typedef struct _WordsOfInterest {  // this is in an header file containing just
    char **saved;                  // the struct and libraries
    int index;
} wordsOfInterest;
int main() {
    char *token1, *token2, *save1 = NULL, file[LEN], *temp, *word, **tokenArr;
    int n=0, ch,ch2, flag=0, size, init=0,position,currEdit,init2=0,tempEdit,size_arr=LEN, 
        oldIndex=0,totalIndex=0,*editArr,counterTok=0;
    wordsOfInterest toPrint;
    char **final;
    toPrint.index = 0;
    toPrint.saved = malloc(sizeof(char*)*LEN);
    editArr = malloc(sizeof(int)*LEN);
    tokenArr = malloc(sizeof(char*)*LEN);
    final = malloc(sizeof(char*)*1);
    // external for loop 
    for(...) {
        tokenArr[counterTok] = token1;
        // internal while loop
        while(...) {
            // some code here surely not involved in the issue
        } else {
            if(init2 == 0) {
                currEdit = config(token1,token2);
                toPrint.saved[toPrint.index] = token2;
                toPrint.index++;
                init2 = 1;
            } else {
                if((abs((int)strlen(token1)-(int)strlen(token2)))<=currEdit) {
                    if((tempEdit = config(token1,token2)) == currEdit) {
                        toPrint.saved[toPrint.index] = token2;
                        toPrint.index++;
                        if(toPrint.index == size_arr-1) {
                            size_arr = size_arr*2;
                            toPrint.saved = realloc(toPrint.saved, size_arr);
                        }
                    } else if((tempEdit = config(token1,token2))<currEdit) {
                        freeArr(toPrint, size_arr);
                        toPrint.saved[toPrint.index] = token2;
                        toPrint.index++;
                        currEdit = tempEdit;
                    }
                }
            }
            flag = 0;
            word = NULL;
            temp = NULL;
            freeArr(toPrint, size_arr);
        }
    }
    editArr[counterTok] = currEdit;
    init2 = 0;
    totalIndex = totalIndex + toPrint.index + 1;
    final = realloc(final, (sizeof(char*)*totalIndex));
    uniteArr(toPrint, final, oldIndex); 
    oldIndex = toPrint.index;
    freeArr(toPrint,size_arr);
    fseek(fp2,0,SEEK_SET);
    counterTok++;
}
 
    