The reason fragmentation is a problem for char arrays and not for ints or bools is that... it isn't, both things have the same probability of screwing you up.
BUT, unlike simple types, operations on char arrays often require you to move the data somewhere else in memory (say, you add a character at the end or beginning or concatenate two of them).
That's costly and that's the reason people don't like the String class, because it hides that from the newbie. All you see is string = string1 + string2, while on the background you are allocating a new array and copying two other arrays to that place, then deleting the originals. Int additions happen in place, no extra or auxiliary memory needed.
Char arrs are also a lot bigger so it's costly from a computational POV as well, it takes more time.
The theory is that by doing all the stuff by hand using chars instead of using String, you start questioning why you're doing that, and you would try to find a way to not need to do it.
So, that's the reason people recommend char arrays over String. It also doesn't help that it was bugged. That was fixed in 2013 or so, but people still haven't caught with that yet.. 
In reality, thou, the String class actually works better than you'd think, as it tries to grow the internal char array first, and then if it doesn't fit, reallocate it.
In and on itself, you wouldn't fix anything by using char arrays over String. The String class does nothing to fragment your memory by it self. I have projects running for years which use String and haven't failed yet.
As for avoiding fragmentation, as a general rule of thumb, you should allocate and de-allocate memory the least amount of times as is possible.
There's no much else to say really, allocate what you need globally, and leave it alone... or that's the goal, obviously real life can and will get more complicated than that, but on an ideal world, that's what you would like to be doing 100% of the time.
If your memory going down and down all the time, then yeah, you have a leak somewhere. Since you are allocating memory your self, I would pay special attention to that of course, but without seeing your code is impossible to tell.