title image


Smiley Pointer auf Pointer ... FIFO löschen
Hallo zusammen,



ich habe eine FIFO mit Prioritäten geschrieben. bei meiner Delete-Fkt habe ich das Problem, das ich nach deren Ausführung doch wieder die Funktion ADD ausführen kann und kein Fehler zurückgegeben wird.



Meine DELETE-FKT übergebe ich einen Pointer (habs so im struct definiert), also buf ist ein Pointer auf die FIFO:



void FIFODelete(FIFO buf){ //Löscht die Liste

if (buf == NULL) //Abbruch falls Buffer NULL

return;

if (buf->next != NULL)

FIFODelete(buf->next); //Solange es ein nächstes Element gibt,

//folgt ein rekursiver Aufruf von FIFODelete

//Speicherfreigabe, da für Buf und Data Speicher in ADD reserviert wurde

free(buf->data); //Speicherfreigabe von den Daten

free(buf); //Speicherfreigabe von dem Buffer



buf->next = NULL;

buf = NULL;

}



Meine ADD-Funktion:

int FIFOAdd(FIFO buf, void *elem, int size, int prio){

if(buf == NULL || elem == NULL) //Inkorrekter/-s Buffer oder Element

return -1;

FIFO pSearch = buf; // Hilfszeiger zum Suchen und Verknüpfen

if (prio MAX_PRIO || size <= 0) // inkorrekte Prio oder Size

return -1;



while (pSearch->next && pSearch->next->prio >= prio)

pSearch = pSearch->next;



FIFO newOne = (FIFO) malloc (sizeof (*newOne));

// Erstelle FIFO-Zeiger auf allokierten Speicher

// Bei Fehler wird NULL zurückgegeben



if (newOne == NULL) //Speicherallokation von newOne überprüfen

return -1;



newOne->prio = prio; //Prio zuweisen

newOne->size = size; //Größe zuweisen

newOne->data = malloc (size); //Speicherallokation



//Einbinden in Liste

newOne->next = pSearch->next; //neues Element an Nachfolger verknüpfen



pSearch->next = newOne; //altes an neues Element verknüpfen



if (newOne->data == NULL) //Speicherallokation überprüfen

return -1;

else

memcpy(newOne->data, elem, size); //kopiert die ersten size Bytes von

//elem in den Speicherbereich von

//newOne-Data.

return size;

}



Mir wurde durch einen Freund der Hinweis gegeben, das man dieses Problem durch einen pointer auf einen pointer, der auf das fifo zeigt lösen kann. leider bekomm ich das nciht hin. ich kann immer noch nach delete munter add-en.



Habt ihr eine idee?



MFG

Enrico

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: