Hvis en funktion skal kunne modificere et argument så den der kalder funktionen kan se det må man give funktionen en pointer (eller reference) til variablen;
void f(TYPE *i) { *i = whatever; }
Hvis man giver f en normal variabel vil den modificere sin kopi af variablen.
I dit tilfælde er TYPE en int *, så din init skal have en pointer til en int *: void init(int **p) { *p = (int*)malloc(sizeof(int)); if (*p == NULL) fatalerror(".."); }
int main() { int *p; init(&p); destroy(p); }
Destroy behøver ikke få en int **, den modificerer ikke pointeren.
Jeg vil gerne starte med en int p (ift. for hvor jeg for havde en int *p) og saa lave en init og destroy funktion der har typen init(int *p) og destroy(int *p). Udfra bertels eksempel ville jeg tro det blot var at gaa et skridt "tilbage" (altsa **p = *p og *p = p) men saa giver free fejl.
Det er vel Bertel der har trukket det tunge læs, men et kig i min glas kugle siger at han nok ikke vil have point, så ...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.