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