hmm did you try to allocate the memory for String2 like this :
mi.String2 = malloc(sizeof(char) * 31);
and not
mi.String2= new char[31];
? maybe the program internally tries to change the string2 and thus tries to deallocate the string2, but not using delete, but free !
edit: i just saw that you already have no crash, so this post won't be useful
