Re: c-program og to pointere core-dumper

From: Michael Knudsen <none_at_e--molioner.dk.lh.bsd-dk.dk>
Date: Wed, 31 Jan 2007 23:11:15 +0100
To: bsd-dk_at_bsd-dk.dk

Quoting Claus Guttesen (kometen_at_gmail.com):
> >Jeg skal overføre nogle værdier som pointere i c, som core-dumper. For
> >at se hvad jeg gjorde galt, skrev jeg så dette lille program (ingen
> >applaus tak):
>
> For at svare på min egen mail, så løste problemet sig ved at malloc'e a og
> b:
>
> ...
> a = malloc(sizeof(int));
> b = malloc(sizeof(int));
> ...

Ja, det er klart. ``int *a'' allokerer kun plads til en pointer, og
hvis den ikke er initialiseret til noget, peger den et vilkaarligt sted,
og naar du saa bruger ``*a'', derefererer du en pointer, du ikke ved
hvor peger hen. Med to pointere er du blot uheldig at den ene peger
over i en hukommelsesside, der ikke tilhoerer dit program.

Det kan ogsaa ske med en enkelt pointer, hvis du har tilpas meget skidt
paa
stakken, og din pointer er en lokal variabel som i dit eksempel. Proev
e.g. ``printf("a = %p\n", a)'' nogle gange og kald nogle funktioner
indimellem, hvor du tildeler nogle lokale variable forskellige vaerdier.

Med malloc() initialiserer du pointeren til et stykke allokeret
hukommelse. I oevrigt boer du kunne bruge foelgende idiom i stedet:

        a = malloc(sizeof(*a));

Paa den maade bliver malloc()-kaldet uafhaengigt af typen af a.

Foelgende side er i oevrigt vaeldig god til at forklare mange ting om
pointere i C paa en god og letforstaaelig maade:

        http://pweb.netcom.com/~tjensen/ptr/cpoint.htm

Mvh. Michael.

-- 
`Give a man a fire and he's warm for a day, but set fire to
him and he's warm for the rest of his life.'
-- (Terry Pratchett, Jingo)
Received on Wed 31 Jan 2007 - 23:11:28 CET

This archive was generated by hypermail 2.2.0 : Sat 19 Mar 2011 - 18:34:38 CET