[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: segfault su Debian & su centos 5 no



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


Reply to: