Salve a tutti, ho un problema che non riesco a capire/risolvere.
Sto implementando un Circular Buffer, definendolo nel seguente modo:
typedef struct {
UC_8 *base;
UC_8 *head;
UC_8 *tail;
UI_16 length;
UI_16 count;
}CB_t;
Per adesso voglio andare ad aggiungere un elemento al buffer e controllare l'elemento aggiunto. Per questo motivo ho scritto la seguente funzione per aggiungere un elemento al buffer :
void CB_Add_Item(CB_t* cbuf, UC_8 item)
{
/*we need to check to see where the current head is*/
if (cbuf->head == cbuf->head +(cbuf->length-1))
{
cbuf->head = cbuf->base; /*set the head on the base*/
}
else /*the head it's not in the last position*/
{
cbuf->head++;
}
/*Assign the item to the head*/
*(cbuf->head) = item;
printf("Item Add ");
printf("Item Add is %d: \n ",*cbuf->head );
}
Nel main inizialmente alloca memoria per il buffer e aggiungo un elemento, nel seguente modo :
int main (void)
{
CB_t cbuf;
UI_16 prova;
UC_8 item = 10;
LENGTH = 10;
cbuf.base = (UC_8 *) malloc(LENGTH);
CB_Add_Item(&cbuf,item);
return EXIT_SUCCESS;
}
In questo modo tutto funziona correttamente e vedo stampato su console : Item Add Item Add is 10:
Successivamente volevo andare a leggere il valore aggiunto per effettuare un ulteriore controllo e salvarlo in una variabile, quindi semplicemente ho aggiunto uno statement:
int main (void)
{
CB_t cbuf;
UI_16 prova;
UC_8 item = 10;
LENGTH = 10;
cbuf.base = (UC_8 *) malloc(LENGTH);
CB_STATUS = CB_Add_Item(&cbuf,item);
prova = *(cbuf.head); /*STATEMENT AGGIUNTO */
return EXIT_SUCCESS;
}
Il codice compilando non da comunque errori o warning, ma non funziona più. Infatti in console leggo <terminated> (exit value: -1.073.741.819) .
Utilizzando il debug ho notato che lo statement in cui si "blocca" è il seguente:
*(cbuf->head) = item;
Non riesco a capire il perchè, volevo sapere se per caso qualcuno poteva aiutarmi o avesse qualche idea.
Grazie a tutti spero di essere stato chiaro