Mahlzeit allerseits,
mal wieder hab ich ein kleines Problemchen und ich komme nicht weiter.
Es geht um Folgendes:
In meiner main-Funktion setze ich zunächst einen Pointer auf NULL:
Anschließend schwurbelt das Programm fröhlich vor sich hin (an das Ganze ist noch GTK angeflanscht), und irgendwann drückt man dann mal ein Knöpfchen und blogEntry wird mit Daten gefüllt. Das ist auch schön und gut, denn ich prüfe in der entsprechenden Funktion, ob blogEntry NULL ist bevor ich es gegebenenfalls free'e:
Das Problem des Ganzen:
Es funktioniert genau ein einziges Mal. Beim ersten Klick werden Daten geladen, weil das Ganze in der main() ja auf NULL gesetzt wurde. Beim zweiten Klick wird zwar freeBlogEntry() aufgerufen, aber am Ende scheinbar blogEntry nicht auf NULL gesetzt (oder aber es wirkt sich nicht, wie gedacht, auf mainWindow->blogEntry aus). Und beim dritten Klick knallt es dann, weil das Ganze nicht NULL ist, aber auch keine Daten mehr enthält und somit "free" daneben geht.
resultiert also scheinbar nicht, wie gewünscht in
obwohl ich doch auf dem Pointer arbeite (?).
Ich verstehe nun nur nicht ganz, warum mir der Wert des Pointers nicht auf NULL gesetzt wird, denn da ich ja direkt auf dem Pointer arbeite sollte sich die Änderung durch nach dem Durchlaufen der Funktion unmittelbar auf "mainWindow->blogEntry" auswirken, oder seh ich hier irgendeinen Fehler nicht?
Danke + Gruß,
Trench
mal wieder hab ich ein kleines Problemchen und ich komme nicht weiter.
Es geht um Folgendes:
In meiner main-Funktion setze ich zunächst einen Pointer auf NULL:
Code:
typedef struct{
...
blogEntry_t *blogEntry;
...
} mainWin;
...
int main(int argc, char *argv[])
{
...
mainWindow->blogEntry = NULL;
...
}
Anschließend schwurbelt das Programm fröhlich vor sich hin (an das Ganze ist noch GTK angeflanscht), und irgendwann drückt man dann mal ein Knöpfchen und blogEntry wird mit Daten gefüllt. Das ist auch schön und gut, denn ich prüfe in der entsprechenden Funktion, ob blogEntry NULL ist bevor ich es gegebenenfalls free'e:
Code:
freeBlogEntry(mainWindow->blogEntry);
Code:
void freeBlogEntry(blogEntry_t *blogEntry)
{
if(blogEntry != NULL)
{
if(blogEntry->date != NULL)
{
printf("Free date...\n");
free(blogEntry->date);
blogEntry->date = NULL;
}
if(blogEntry->audioURL != NULL)
{
printf("Free audioURL...\n");
free(blogEntry->audioURL);
blogEntry->audioURL = NULL;
}
if(blogEntry->imageURL != NULL)
{
printf("Free imageURL...\n");
free(blogEntry->imageURL);
blogEntry->imageURL = NULL;
}
free(blogEntry);
blogEntry = NULL;
}
}
Das Problem des Ganzen:
Es funktioniert genau ein einziges Mal. Beim ersten Klick werden Daten geladen, weil das Ganze in der main() ja auf NULL gesetzt wurde. Beim zweiten Klick wird zwar freeBlogEntry() aufgerufen, aber am Ende scheinbar blogEntry nicht auf NULL gesetzt (oder aber es wirkt sich nicht, wie gedacht, auf mainWindow->blogEntry aus). Und beim dritten Klick knallt es dann, weil das Ganze nicht NULL ist, aber auch keine Daten mehr enthält und somit "free" daneben geht.
Code:
blogEntry = NULL;
resultiert also scheinbar nicht, wie gewünscht in
Code:
mainWindow->blogEntry = NULL;
obwohl ich doch auf dem Pointer arbeite (?).
Ich verstehe nun nur nicht ganz, warum mir der Wert des Pointers nicht auf NULL gesetzt wird, denn da ich ja direkt auf dem Pointer arbeite sollte sich die Änderung durch nach dem Durchlaufen der Funktion unmittelbar auf "mainWindow->blogEntry" auswirken, oder seh ich hier irgendeinen Fehler nicht?
Danke + Gruß,
Trench