Gå til innhold

struct med double pekere


Anbefalte innlegg

Alt for lenge siden jeg har kodet i c nå, og sliter litt med og huske

hvordan jeg håndterer pekere og strukter.

Gitt følgende pseudokode:

 

typedef struct node NODE;

struct node
{
 double* d;
};


int main()
{
 NODE *no;
 enMetode(no);
 printf("%d", no->[0]);
}

void enMetode(NODE *n)
{
 n = enAnnenMetode();
 n->d[0] = 3.14;
}

*NODE enAnnenMetode()
{
 NODE *m = malloc(sizeof (NODE));
 m->d = malloc(sizeof (double)*MAX);
 return m;
}

 

Hva gjør jeg feil her? Ser ut til at minneallokeringen jeg

gjør i enAnnenMetode() blir borte når enMetode() returnerer.

Endret av shakur
Lenke til kommentar
Videoannonse
Annonse

I enMetode så er NODE *n bare en peker.

Det det virker til at du egentlig er ute etter, er en peker til en peker her

 

void enMetode(NODE **n)

{

*n = enAnnenMetode();

*n->d[0] = 3.14;

}

 

og i main kaller du

enMetode(&no);

 

Grunnen er at når enMetode blir kalt, så kopieres bare denne pekeren, og det at du endrer pekeren i funksjonen vil ikke følge med når funksjonen er ferdig, så dette er egentlig en memory leak.

Lenke til kommentar
I enMetode så er NODE *n bare en peker.

Det det virker til at du egentlig er ute etter, er en peker til en peker her

 

void enMetode(NODE **n)

{

*n = enAnnenMetode();

*n->d[0] = 3.14;

}

 

og i main kaller du

enMetode(&no);

 

Grunnen er at når enMetode blir kalt, så kopieres bare denne pekeren, og det at du endrer pekeren i funksjonen vil ikke følge med når funksjonen er ferdig, så dette er egentlig en memory leak.

 

Takk for svar, det er vel uansett ikke en veldig pen løsning synes jeg. Koden min var hentet fra en

oppgavetekst, men den er nå forandret slik at enAnnenmetode() er også void og tar NODE *n som argument.

Da blir det litt lettere.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...