Re: c-program og to pointere core-dumper

From: Søren Hansen (none@shan--soeren-hansen.dk.lh.bsd-dk.dk)
Date: Fri 02 Feb 2007 - 18:42:15 CET


Date: Fri, 02 Feb 2007 18:42:15 +0100
From: Søren Hansen <none@shan--soeren-hansen.dk.lh.bsd-dk.dk>
To:  bsd-dk@bsd-dk.dk
Subject: Re: c-program og to pointere core-dumper

Hej Claus

Claus Guttesen wrote:

> #include <stdio.h>
>
> void print_pointer(int *);
>
> int main(int argc, char *argv[], char *envp[]) {
> int *a, *b;
> *a = 7;
> printf("Hej\n");
> print_pointer(a);
> *b = 9;
> return(0);
> }
>
> void print_pointer(int *a) {
> printf("a: %i\n", *a);
> }
>

At det rent faktisk lykkes dig at få skrevet 7 ned i *a på den ene
arkitektur er vist mere held end forstand. Begge variable er
uinitialiseret, så 7 og 9 bliver skrevet tilfældige steder i
hukommelsen, og dette VIL gå galt.

Selvom du kompilerer med -Wall får du ikke alle advarsler. Jeg kan
anbefale dig at sætte -O2 på også. Det er egentlig et optimeringsflag,
men det sikrer at kompilereren kommer en ekstra iteration igennem koden,
og derved kan opdage flere mistænkelige forhold, som den kan advare dig
om. Da jeg kompilerede dit program fik jeg således:

18:34 lober :-) gcc -o pointer -O2 -Wall pointer.c
pointer.c: In function `main':
pointer.c:7: warning: 'a' might be used uninitialized in this function
pointer.c:7: warning: 'b' might be used uninitialized in this function

De advarsler giver et godt hint om fejlen.

MVH Søren



This archive was generated by hypermail 2b30 : Wed 28 Feb 2007 - 23:00:02 CET