Kent Friis wrote:
> Den Thu, 09 Feb 2006 22:38:29 +0100 skrev Paminu:
>> Mogens Hansen wrote:
>>
>>>
>>> "Paminu" <sdef@asd.com> wrote in message
>>> news:dsgbsn$usv$1@news.net.uni-c.dk...
>>>
>>> [8<8<8<]
>>>> Hvad kan det være sidste linie giver en fejl når cp netop er en pointer
>>>> til
>>>> structs af typen container?
>>>
>>> Det er compilerens statiske typecheck der påpeger en fejl.
>>> Du prøver at tildele en variabel af typen "pointer til container" en
>>> værdi af typen "container" - det går galt.
>>> Du tage adressen af "pp":
>>> cp = &pp;
>>>
>>>>
>>>> Hvis jeg i stedet laver cp[0] = pp; så kører det fint...
>>>
>>> Nej - det kører ikke fint. Du har muligvis ikke opdaget at det forholder
>>> sig sådan.
>>> Det er undefined behaviour - en bombe der kan sprænge når som helst.
>>
>> Fordi jeg ikke har allokeret pladsen med malloc først?
>
> Det havde du ikke i det program du postede. Men det forklarer hvorfor
> dit program ikke crashede.
>
> Hvis du vil sætte din pointer til at pege på en eksisterende
> struct, skal du IKKE malloc'e først. Pointeren kan kun pege på en
> ting ad gangen, enten det du malloc'ede, eller pp.
>
> Og husk at kalde free() lige så mange gange som malloc. Det vil
> sige inden du ændrer pointeren til at pege på noget andet - for når
> du først har ændret den, er der ikke længere noget der peger på
> det du malloc'ede.
>
>> Kan jeg ødelægge noget sådan rigtigt på min computer (håber ikke det er
>> et kæmpe blondine spørgsmål)?
>
> Under et moderne OS ville jeg sige nej. Ikke medmindre du er ovre i
> noget driver-programmering, eller til nød som root. Men du kan, hvis
> du er tilstrækkelig uheldig - slette alle de filer du har adgang til
> at slette.
>
> Når C-standarden siger "udefineret", betyder det at den tillader alt
> lige fra at programmet virker til at der falder en jumbojet ned oven i
> huset - og selvom det virker på din PC idag, kan der sagtens ske noget
> helt andet på naboens, eller i morgen. Men compileren er stadig
> begrænset af OS'et (medmindre du kører DOS, den begrænser ikke noget).
>>> Læs grundigt på pointere inden du går videre.
>>> Tag et kig på værktøjer som CodeGuard, Purify, BoundsChecker eller
>>> Valgrind.
>>
>> Er pt begravet i bøger, men selvom jeg syntes jeg forstår det jeg læser
>> er det bare noget andet når man begynder at kode. Men mange tak for
>> anbefalingerne!
>
> Pointere er altså ikke så svære som folk får dem til at lyde, man skal
> bare lige vænne sig til at tænke på dem på den rigtige måde.
Hehe ja jeg begynder at holde lidt af dem, får med garanti nogle søde drømme
i nat
> Og så slå alt hvad compileren har af warnings til, det tager de værste
> hovsa'er
Tænker du på -Wall?