Liberar / Reservar memoria dinámica problema

Hola,

Estoy intentando manejar la memoria dinámica de forma eficiente. Para ello, reservo el espacio de las variables con la función 'malloc()' y posteriormente la libero con 'free()' de la siguiente forma:

char* a;

a=(char*)malloc(15*sizeof(char));

(...)


free(a);

Tengo como 12 variables de este tipo de diferentes tamaños.

El problema es que al empezar el programa tengo 395 bytes de memoria libre, y al acabar (liberando todas las variables) se me quedan en 361 (pierdo 34 bytes!!!) Esto hace que en la siguiente iteración del código, se produzca un desbordamiento y el programa se queda estancado. (De hecho me imprime varias veces que la memoria restante es 2047 bytes y de repente se para)

1.- ¿Importa el orden de liberación de memoria? Me explico, si reservo memoria para a, b y c y luego las libero en orden b, a, c ¿tiene alguna consecuencia? Entiendo que no...

2.- ¿Alguien sabe por qué hay 34 bytes que no se liberan? ¿Cómo lo puedo solucionar?

Gracias anticipadas,

PD: Para leer la memoria RAM disponible he seguido el siguiente enlace: LINK

PD2: He probado con varios IDE de arduino y, aunque la memoria inicial y final cambian (mejorando en las nuevas versiones), la cantidad de bytes perdidos sigue siendo 64.

Todo bárbaro pero y el código de tu ejemplo?

¿Es realmente necesario hacerlo? Lo pregunto, porque yo tenia un proyecto que usaba mucha memoria, y lo solucioné haciendo todos los print con F. Ejemplo:

lcd.print (F("GPS OK"));

Pero el habla de variables dinámicas no de ahorrar memoria de string constantes.

Ya lo se, pero quizá se puede ahorrar memoria por otro lado. Sin el código, todo son especulaciones.

He vuelto a reescribir el código y ya libera bien la memoria, quizás me dejé algún free de colocar o similar...

Gracias por las respuestas de todas formas!

Carmeloco, sí, esa función ya la estoy usando y resulta muy útil para ahorrar memoria dinámica!

No se recomienda el uso de malloc en sistemas embebidos.
Explicaciones muchas, como no disponer de un controlador de memoria. quedan huecos al liberarse que en la siguiente llamada puede no caber e intentar ocupar un bloque que no pueda entregar porque no tiene mas.
Aqui una hermosa explicacion que encontre probando una llibreria que usaba malloc y fallaba, pero esta no porque lo soluciona con vectores fijos.

Realmente una explicación hermosa y simple, maxid, mereses ponerla en un tutorial porque me has ahorrado y a mas de uno también algunos dolores de cabeza futuros.

pago un dominio y nunca termino de configurar mi blog. una verguenza jajaja.
Lo voy a poner

Cosas que pasan. De veras no es para cualquier usuario o programador pero para quienes hacemos cosas raras, si.

tengo una pregunta interesante se podria hacer un programa entre .h y ino y txt para reducir memoria
me refiero a crear un ino que lee el .txt de una SD y el .ino lo traduce a texto legibre para el compilador pero todo se ejecuta desde la cpu del arduino para ejecutar programas de mas 256k .
saludos.

No reavives hilos que tienen mas de 120 dias sin movimientos.
Este no ha cambiado desde 2015.
Crea un hilo nuevo con tu consulta.
De paso, lee las normas del foro.
Gracias.