Ich habe also einen Code, etwa wie den folgenden, um eine Struktur zu einer Liste von Strukturen hinzuzufügen:
void barPush(BarList * list,Bar * bar)
{
// if there is no move to add, then we are done
if (bar == NULL) return;//EMPTY_LIST;
// allocate space for the new node
BarList * newNode = malloc(sizeof(BarList));
// assign the right values
newNode->val = bar;
newNode->nextBar = list;
// and set list to be equal to the new head of the list
list = newNode; // This line works, but list only changes inside of this function
}
Diese Strukturen sind wie folgt definiert:
typedef struct Bar
{
// this isn't too important
} Bar;
#define EMPTY_LIST NULL
typedef struct BarList
{
Bar * val;
struct BarList * nextBar;
} BarList;
und in einer anderen Datei mache ich etwas wie das Folgende:
BarList * l;
l = EMPTY_LIST;
barPush(l,&b1); // b1 and b2 are just Bar's
barPush(l,&b2);
Danach zeigt l jedoch immer noch auf EMPTY_LIST und nicht auf die geänderte Version, die innerhalb von barPush erstellt wurde. Muss ich list als Zeiger auf einen Zeiger übergeben, wenn ich sie ändern will, oder ist eine andere dunkle Beschwörung erforderlich?