[AVR-GCC] Lista jednokierunkowa problem...

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.

Reply to
Pawel K
Loading thread data ...
Reply to
Przemysław Szeremiota

Przemysław Szeremiota pisze:

to co dokladnie robi free()? Myslalem ze zeruje wskaznik, nie myle z obszarem wskazywanym. Przy inicjacji zeruje prewencyjnie wskazniki. Na koncu bufora, ostatni rekord ->next jest NULL, takze ma sie na czym zatrzymac.

zapetla mi sie na

while (tmp->next != NULL) tmp = tmp->next;

ale dopiero po ktoryms przejsciu ... wydaje mi sie ze zle wywoluje free() bo wskazniki mi sie nie zeruja tylko bzduty sie tam wpisuja.

To zauwazylem, ale bufor ma 5 ramek a wywala sie przy zwalnianiu jakiejs srodkowej.

to pozostalosc po zdefiniowaniu tmp jako volatile, kompilator wywalal niezgodnosc typow ...

Reply to
Pawel K
Reply to
Przemysław Szeremiota
Reply to
Przemysław Szeremiota

Przemysław Szeremiota pisze:

NIe ma az takiej potrzeby, najwazniejszego sie dowiedzialem ze free() nie zeruje wskaznika ... i tu tkwil moj blad.

Reply to
Pawel K
Reply to
Przemysław Szeremiota

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.