memory free... ma siamo sicuri?

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.