недавно сам столкнулся с этим моментом... пытался транслятор ST в Си замутить, все хорошо было, пока не дошел до типа данных string... планировал обойтись вообще без динамической памяти, чтобы на микроконтроллерах маленьких можно было его гонять... так и не придумал как рулить памятью для этого типа (в частности возврат значений в string из функций), вариант был или фиксированной длиной этот дип по дефолту делать (типа 80 байт), либо делать механизм выделения/уничтожения динамической памятью... в итоге плюнул, переделал на плюсовый компилятор с его родным string
Динамическое выделение памяти в контроллерах - хреновая затея.