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


-- 
Per REVOCARE l'iscrizione alla lista, inviare un email a 
debian-italian-requ...@lists.debian.org con oggetto "unsubscribe". Per
problemi inviare un email in INGLESE a listmas...@lists.debian.org

To UNSUBSCRIBE, email to debian-italian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/36307.151.32.166.21.1356948957.squir...@mail.dm.unipi.it

Rispondere a