Computer memory is said to be
fragmented when a request has been made to allocate consecutive memory from a
heap, and, although that amount of memory is free in total, it's not available in one piece, each bit is too small.
This in theory is a particularly nasty problem. In languages like C, memory cannot be safely moved around without the software designer writing quite a lot of code; and it turns out that fragmentation can occur when an extremely large percentage of memory is still free, like 50%.
However, although in theory it can be very bad, in practice it is a little less so. You can usually test for it happening and making slight changes to the order you allocate your memory will often resolve it. Also if you have lots and lots of memory, you won't generally have any problem at all.
Also a compacting garbage collector can be used (but not usually with the C language, but with Java and other languages it is possible), and that can resolve the issue should it occur.