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