In an embedded systems unit that I'm taking at uni next year, we will learn that dynamic data structures are a bad thing to have in an embedded system program. But the lecture notes don't go into why.
Now I'm working on a moderate scale, embedded systems controller, mostly just takes advantages of the peripheral of the "Butterfly" demo board for the AVR169MEGA. Produced 4 PWM signals to control servo's and ESC. And also to provide a 9-seg LCD screen.
Now I can't think of any better way to store instructions as they are received via USART serial than a queue. Especially for things where I'll need to wait until an unknown amount of data has been received: e.g. a string to display on the LCD screen.
So why don't you use dynamic data structures on a microcontroller in embedded systems? Is it just that you're on a heavily memory restricted environment, and have to be sure your mallocs are succeeding?
There are a number of reasons not to use malloc (or equivalent) in an embedded system.
Best of all - if you do not dynamically allocate memory then you can't get memory leaks.