Witam, zrobilem sobie buffor do UARTa, cos na styl listy jednokierunkowej. strukturka bufora:
typedef struct TxFrame_t { struct TxFrame_t *next; size_t len; uint8_t *data; uint16_t CrcValue; }TxFrame_t;
dynamicznie przydzielam przez malloc miejsce na ramke bufora oraz dynamicznie miejsce na dane (wskaznik data). wszystko dziala fajnie tworzenie ramki, zapisywanie do niej danych wysylanie. Zaszla jednak potrzeba kasowania calego bufora wraz przydzielona pamiecia na dane i tu mam problem.
funkcja ktora powinna to robic ... powinna zwolnic cala zarezerwowana pamiec od konca bufora a w/g AVRStudio nie robi tego ... zapetla sie na wyszukiwaniu ostatniego rekordu.
bool DeleteTxBuff (TxFrame_t *first) { TxFrame_t *tmp = NULL; if (Uart0Status == Tx_Busy || first == NULL) return false;
do { tmp = first; while (tmp->next != NULL) tmp = tmp->next; //idz do ostatniej ramki
free(((TxFrame_t *)tmp)->data); // zwalnia pamiec danych free((TxFrame_t *)tmp); // zwalnia pamiec ramki bufora } while (first);
return true; }
co jest nie tak? podejzewam ze free zle wywoluje ale nie wiem w czym blad.