Newsgroup: it.comp.lang.c
Titolo: Prevenire lo sforamento di un vettore

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

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

 AFAIK no.
Ma si che puo'. Quello che non puo' e' farlo a compile time.
-- 
-riko

 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

Enrico Franchi ha scritto:

Aggiungo valgrind
- sï¿œ, lo so che per gli array sullo stack fa poco o nulla, ma ï¿œ 
utilissimo comunque ;D

 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

 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

> 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.

 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