uhmmm posta il codice della liibreria che usi
la versione base per lo spazio ram è questa:
int freeRam () {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
questa funzione dovrebbe solo cotare la distanza tra stack e heap, dove l'inizio dello stack viene considerata l'indirizzo di int v.
in realtà all'interno dello heap possono essere presenti blocchi di memoria che sono stati liberati con una free, e che vengono così contati:
/* Calculates the size of the free list */
int freeListSize() {
struct __freelist* current;
int total = 0;
for (current = __flp; current; current = current->nx) {
total += 2; /* Add two bytes for the memory block's header */
total += (int) current->sz;
}
return total;
}
in teoria quando allochi qualcosa con la malloc, dovresti vedere il valore restituito da freeListSize cambiare, ed eventualmente anche quellod di __brkval se nella lista della ram freeata non c'era abbastanza spazio.
Invece per le variabili dichiarate localmente e senza uso di malloc, dovresti vedere l'indirizzo dello stack cambiare.
per capire cosa realmente sta succedendo, ti consiglio di stampare gli indirizzi delle funzioni, degli array e anche delle variabili locali. così capiamo dove sta il problema.