So much fear of things that have been common practice in embedded systems for decades.... I started using malloc() in the '70s, when that was all we had. Back then, even 2K of RAM was all but unheard of in most embedded systems.
Contrary to the impression one gets reading this thread, malloc() does NOT automatically lead to fragmentation, and can be safely used even on small systems with a little care. Sure, if you constantly, randomly allocate and de-allocate memory you are likely to get into trouble at some point. But that's true no matter how much memory you have. And, if the code is poorly written, and does not check the result of each malloc(), and ensure each malloc() has a matching free(), then you will also get into trouble, no matter how much memory you have.
However, a large range of applications can be designed to do huge numbers of malloc()'s in perfect safety. One of my current projects does literally thousands of malloc() calls every single second it's running, and will run essentially indefinitely with zero "leakage". In many, many cases, the usage amounts to malloc(), malloc(), malloc(), etc. followed by free(), free(), free(). At the end of all the frees, the heap is back to a single, large, contiguous block, exactly as it was on startup. As long as peak usage does not exceed available memory, you can repeat this sequence indefiniteiy. There are many, many well-known methods of avoiding fragmentation in cases where more chaotic patterns are necessary.
Sure, malloc() requires some care, and is likely beyond the safe reach of a "newbie", but don't tell them it "can't" be done. Instead, tell them it can be done, but requires an experienced programmer to do it safely.
Regards,
Ray L.