Print all subsets and permutations of a string
Some (most of?) dynamic allocations seem unnecessary. A call to createString can be safely replaced with a local char string[6]; Similarly, a call to genBetween could be reduced essentially to

char generatedSubString[6];
strncpy(generatedSubString, string + counter1, counter2 - counter1);

Testing for numPermuted &lt; 120 looks strange. You should trust your math. If you do not, don't fail the test silently, but rather assert(numPermuted &lt; 120), and if it triggers, revisit your assumptions.
A search for already permuted (in fact, already visited) substring is suboptimal. Consider filling the permuted array in sorted order (to enable binary searching it).