Ciao Bodrato

Capisco il tuo consiglio e ti rigranzio, ma comunque non mi spiego perche
su debian a 64 non funziona invece su una debian a 32bit e su centos 32 bit
si

Il giorno 31 dicembre 2012 11:15, <bodr...@mail.dm.unipi.it> ha scritto:

> Ciao,
>
> Il Dom, 30 Dicembre 2012 7:45 pm, emmanuel segura ha scritto:
> > Sto giocando con un piccolo e stupido programma in C che posto qua sotto,
> > sulla mia debian 6.0.6 va in segfault su una centos 5 no, la cosa stranna
>
> [...]
>
> > name_t pa[];
> >
> > int main()
> > {
> >         int i,SIZE = 255;
> >         for(i = 0; i <= SIZE; i++)
> >         {
> >                 pa[i].name = "Pippo";
> >                 pa[i].id = i;
> >                 printf("\t%s - %d\n",pa[i].name,pa[i].id);
> >         }
> > }
>
> Quale sarebbe il risultato atteso da questo programma?
>
> Io, vedendo che questo programma scrive dentro un array per il quale non
> è stata allocata memoria, mi aspetterei un "segfault". Quindi direi che
> la tua prova con Debian è andata più vicina al risultato atteso.
>
> Come ti hanno già scritto altri, attento ai messaggi del compilatore, il
> gcc dice chiaramente:
> /tmp/x.c:8:8: warning: array ‘pa’ assumed to have one element [enabled
> by default]
>
> Quindi, se 'pa' ha un elemento e tu ne scrivi 256...
>
> Ti consiglierei di cominciare il codice con
> #define SIZE 256
>
> definire l'array con
> name_t pa[SIZE];
>
> non ridichiarare la variabile SIZE dentro la funzione main e impostare il
> ciclo con:
> for(i = 0; i < SIZE; i++)
>
> ... poi leggere un buon manuale sul C, al capitolo sui puntatori.
>
> Infine compilare con 'gcc -Wall' e leggere _tutti_ i "warning" che il
> compilatore tira fuori.
>
> Buono studio,
> m
>
> --
> http://bodrato.it/software/combinatorics.html
>
>


-- 
esta es mi vida e me la vivo hasta que dios quiera

Rispondere a