Newsgroup: it.comp.lang.c
Titolo: AIUTO!! SEGMENTATION FAULT!!

Sto scrivendo un programma in C+-+-.  Ieri funzionava perfettamente, oggi ho
provato ad aumentare il valore di tre costanti (definite con define), che
specificano le dimensioni di un certo array usato nel programma, e mi da' un
errore di segmentation fault.  La cosa strana (per me) e' che l'errore
avviene in punti apparentemente casuali durante l'esecuzione, dove, tra
l'altro, le costanti e il vettore non intervengono.  Cambiando il valore
delle costanti di nuovo (lasciandolo sempre maggiore del vecchio valore
basso che andava bene), il segmentation fault avviene ancora, ma in punti
diversi, dando l'idea di qualcosa di casuale.
Non sono un esperto di C+-+-.  Qualcuno potrebbe aiutarmi e spiegarmi il
motivo di questo strano (per me) fenomeno?
Grazie mille a tutti.
Paolo
aaeal+AEA-tin.it

provato ad aumentare il valore di tre costanti (definite con define), che
    [snip]
Difficile diagnosticare il problema con cosi` poche basi, ma
i sintomi suggeriscono vagamente la presenza di variabili, o
membri di classi, che sono dichiarate in modi diversi per
diversi sorgenti; ad esempio, cio` potrebbe succedere se
tu avessi i #define in piu` di un sorgente e non li avessi
tenuti identici, oppure se tu li avessi in un file .h usato con
#include e non avessi ricompilato tutti i sorgenti che, in modo
diretto o indiretto, "vedono" quel file.
Alex

 aaeal+AEA-tin.it
Io non sono un esperto pero', proprio perche' non lo sono, mi capitano
spesso "comportamenti anomali" simili al tuo e, nel 90% dei casi, scopro
che sono dovuti a miei errori nella gestione dei puntatori !
Ad esempio e' possibile che, aumentando le dimensioni di un vettore
(cambiando il valore della define, se ho ben capito), il programma
risultante e' diverso in modo tale che, un accesso ad una locazione di
memoria errata (ad esempio un ciclo FOR che "sfora"), ti causa un
problema di accesso a memoria che non ti appartiene, perche' magari
quest'ultima e' ora occupata da qualcosa di "importante" (una variabile
o qualcosa che comunque influisce sul programma).
Un programma puo' non presentare un problema che ha fin dall'origine,
anche per molto tempo: poi magari un giorno cambi una "sciocchezza" e
tutto inspiegabilmente non funziona piu'; secondo me questo e' il tipico
caso nel quale c'e' un accesso a memoria che non e' stata in qualche
modo allocata o che comunque non appartiene alla variabile prevista.
Questo tipo di problemi li ho sempre risolti (nel mio piccolo) solo
attraverso un attento debug, seguendo passo passo quello che il
programma deve fare e stando attento che gli Indirizzi di Memoria dei
Puntatori non assumano valori non previsti (ad esempio quello di un
altro puntatore).
Da qui ne deriva che il problema puo' essere causato da una parte del
tuo programma che non ha nulla (o quasi) a che fare con la parte che hai
modificato !!
Sperando di non avere detto un mare di eresie, saluto tutti.
UDA.
-- 
<><><><><><><><><><><><><><><><><><><><><><><><
UDA'Software
mailto:
uda.so...@iol.it
http://www.GeoCities.com/SiliconValley/Bay/2165

che sono dovuti a miei errori nella gestione dei puntatori !
Già normalmente i problemi maggiori vengono proprio dalla gestione dei
puntatori, mi sono imbattuto molte volte in situazioni simili, come credo il
99% dei programmatori c++ c.
Spesso sono riuscito a risolvere il problema facendo una attenta
ricompilazione dei sorgenti che potevano essere coinvolti dalle mie ultime
modifiche, e per 80% dei casi questo basta (stando sempre alla mia
esperienza) mentre per il restante 19% mi sono accorto con il debug che
andavo effettivamente ad eseguire delle operazioni completamente errate :(.
Nel restante 1% (nota dolente) rimangono ancora quei casi che non sono
riuscito a risolvere con una attenta fase di debug, nel mio caso in
particolare ho un errore a runtime (accesso ad una aria di memoria protetta)
in una determinata gestione soltanto sotto ntworkstation mentre sotto 95-98
funziona senza problemi.
Se avete qualche idea... :))
Ciao
Terenzio