После первого выполнения этой строки:
stringArray = realloc(stringArray, arrayLength*sizeof(*stringArray));
, тогда stringArray [arrayLength / 2] будет значением мусора - вы не установили его, чтобы он указывал на хранилище для слова.
Эта часть должна использовать либо sizeof (** stringArray), либо 1, так как ** stringArray is char, а счетчик должен идти только до arrayLength:
for(counter; counter<wordLenght; counter++)
stringArray[counter] = calloc(wordLenght, sizeof(stringArray));
Вместо этого выделять водин блок:
char* block = malloc(wordLength * arrayLength);
for ( counter; counter < arrayLength; ++counter )
stringArray[counter] = block + ( counter * wordLength );
В настоящий момент, возможно, после stringArray есть некоторое пространство, в которое вы сохраняете (wordLength-arrayLength) дополнительные указатели при их вызове, и realloc не перемещаетсяStringArray.
Вполне вероятно, что 0xb49010 является одним из указателей, которые вы называете calloc'd, и вы перезаписываете память, в которой malloc сохраняет размер блока ..
Но так как вы списываетеконец stringArray, вы все равно будете в неопределенном поведении.