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
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

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

Laster...
  • Hvem er aktive   0 medlemmer

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