Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Prevenire lo sforamento di un vettore

5 views
Skip to first unread message

arkkimede

unread,
Dec 11, 2009, 9:38:16 AM12/11/09
to
Ciao a tutti.
Scrivo per il seguente problema.
Eseiste una opzione di compilazione del C (preferibilmente gcc) che mi
verifichi run time se per quanche errore sforo la dimensione massima
di un vettore? (banalmente in un array dichiarato di 10 elementi cerco
di leggerne o scriverne il ventesimo)?

Grazie

Jack

unread,
Dec 11, 2009, 9:57:21 AM12/11/09
to

AFAIK no.
devi scriverti il codice di controllo a manina, magari usando
assert.h.

Ciao Jack

Message has been deleted

Enrico Franchi

unread,
Dec 11, 2009, 3:12:30 PM12/11/09
to
Jack <jack...@gmail.com> wrote:

> AFAIK no.

Ma si che puo'. Quello che non puo' e' farlo a compile time.

--
-riko

Enrico Franchi

unread,
Dec 11, 2009, 3:12:30 PM12/11/09
to
arkkimede <arkk...@gmail.com> wrote:

> Eseiste una opzione di compilazione del C (preferibilmente gcc) che mi
> verifichi run time se per quanche errore sforo la dimensione massima
> di un vettore? (banalmente in un array dichiarato di 10 elementi cerco
> di leggerne o scriverne il ventesimo)?

Ni. Allora il tuo problema e' gia' risolto. Il pezzo difficile e' farlo
staticamente. A runtime puoi usare diversi sistemi.
Propolice, StackGuard ricordo...


--
-riko

Lorenzo Beretta

unread,
Dec 11, 2009, 5:16:32 PM12/11/09
to
Enrico Franchi ha scritto:
Aggiungo valgrind
- sᅵ, lo so che per gli array sullo stack fa poco o nulla, ma ᅵ
utilissimo comunque ;D

Jack

unread,
Dec 14, 2009, 2:43:22 AM12/14/09
to
On 11 Dic, 21:12, r...@despammed.com (Enrico Franchi) wrote:

> Jack <jack4...@gmail.com> wrote:
> > AFAIK no.
>
> Ma si che puo'. Quello che non puo' e' farlo a compile time.

certo che puoi farlo, basta scrivere il codice di controllo a manina.
quello che chiedeva era se il gcc aveva un flag per far in modo che
gcc aggiunga codice di controllo in automatico.
E questo AFAIK non esiste.

Ciao Jack

Enrico Franchi

unread,
Dec 14, 2009, 2:25:00 PM12/14/09
to
Jack <jack...@gmail.com> wrote:

> certo che puoi farlo, basta scrivere il codice di controllo a manina.
> quello che chiedeva era se il gcc aveva un flag per far in modo che
> gcc aggiunga codice di controllo in automatico.
> E questo AFAIK non esiste.

No, chiedeva *possibilmente* il gcc. Di fatto ci sono patch a gcc che
fanno esattamente questo. Quelle che ho nominato nell'altro post.
Se per compilare usi uno dei compilatori che ho nominato, quelle
istruzioni ci finiscono dentro in automatico.


--
-riko

arkkimede

unread,
Dec 14, 2009, 4:13:54 PM12/14/09
to

> No, chiedeva *possibilmente* il gcc. Di fatto ci sono patch a gcc che

Scusate se mi intrometto.
Prima di tutto ringrazio tutti per i suggerimenti e consigli.
In effetti il mio problema era legato ad un baco che mi ha fatto
perdere circa due giorni di lavoro.
L'errore era banale, l'indice di un loop abbastanza complesso, che
doveva essere "muto" nel senso che non doveva
essere usato per accedere agli indici degli array, (c'erano variabili
ad hoc), li ho confusi ed usati per accedere a degli array.

Il tutto creava un segmentation fault in un punto che era del tutto
innocente.

Viaggiando di insight e con tanta pazienza mi sono accorto
dell'errore. Premetto poi che lavoro in debian gnu/linux ed il
compilatore e' il gcc.

Alla mente mi e' venuta allora la mia prima esperienza di
programmatore fortran che dal VMS della Digital approvava al
fortran dello UNIX. Mentre su Digital per esempio venivano fatti tutta
una serie di controlli matematici e di indice dei vettori, in UNIX
cio' , di default , non avveniva.
Mi e' stato spiegato che in Unix era necessario impostare opzioni di
compilazione che diventavano delle "trappole" per gli errori. Il
prezzo era il rallentamento del programma. Una volta sicuri che tutto
funzionava, si poteva eliminare queste trappole guadagnamdo in
velovita'.

La mia speranza allora era che ci fosse qualcosa del genere e, se
capisco bene, qualcosa come quella che chiedo mi sembra non ci sia.

Bisogna ricorrere o ad altri compilatori o utilizzare "delle patch"
per gcc.

Abusando della vostra disponibilita' in cosa consiste l'applicazione
di una patch a gcc o dove posso documentarmi in tal senso.

Comunque Grazie. Grazie Tante.

Enrico Franchi

unread,
Dec 15, 2009, 3:12:27 AM12/15/09
to
arkkimede <arkk...@gmail.com> wrote:

> La mia speranza allora era che ci fosse qualcosa del genere e, se
> capisco bene, qualcosa come quella che chiedo mi sembra non ci sia.

Oibo' ma certo che c'e'.



> Bisogna ricorrere o ad altri compilatori o utilizzare "delle patch"
> per gcc.

Guarda che e' tutto molto standard eh.=

> Abusando della vostra disponibilita' in cosa consiste l'applicazione
> di una patch a gcc o dove posso documentarmi in tal senso.

Un buon punto di partenza e' inserire i nomi che sono occorsi nei miei
post all'interno di un motore di ricerca e guardare i primi link. Io
dico che c'e' il sito del progetto e che di li puoi ottenere tutte le
informazioni del caso. :)

--
-riko

0 new messages