Newsgroup: it.comp.lang.c++
Titolo: debuggando con gdb su una slack8

compilo un programma, lo faccio partire...ovviamente...
Segmentation fault
un paio di giri qua e la', poi provo gdb, ed ecco cosa mi dice
Program received signal SIGSEGV, Segmentation fault.
0x4000c364 in _dl_fini () at dl-fini.c:141
141     dl-fini.c: No such file or directory.
Giulio 
PS. la cosa strana e' anche che il programma raggiunge dei punti oppure no 
(prima di arrivare al Segmentation fault) se per esempio uso o no fprintf() 
qua e la' per debugging
-- 
PGP Key fingerprint = 1A94 043F 1946 7AA9 CB2E  D5ED F83D 2083 25B4 2E27

qua e la' per debugging
Perche' dici che e' una cosa strana ? Se un programma fa
qualche operazione che porta a "undefined behaviour" come
ad esempio la scrittura in un'area deallocata allora *nulla*
puo' a rigore essere considerato strano.
Il fatto che il comportamento del programma cambia seconda
se usi o no delle fprintf e' anche normale... un caso molto
frequente e' utilizzare delle variabili locali o membri di
struttura che non siano stati inizializzati.
Il loro valore e' "indefinito" e su PC questo significa
che le variabili locali intere ad esempio hanno valori
sensati ma pseudocasuali.
Questi valori sono normalmente conseguenza di cosa c'e'
sullo stack e questo cambia a seconda di quali funzioni
sono state chiamate in precedenza e che parametri sono
stati passati a queste funzioni.
Sei sicuro di aver inizializzato tutti i membri di tutte
le strutture/classi che usi ? Sei anche sicuro che non
ci sia qualche caso in cui una variabile locale viene
usata senza essere stata inizializzata ?
Andrea

 
classi e struct erano tutti inizializzate, poi ho fatto un tentativo e ho 
provato a vedere se era una variabile static int che avevo messo in una 
funzione. Risultato...niente Segmentation Fault.
Adesso pero' a me quella variabile io l'ho messa non-static, ma mi serviva 
static (in pratica era un contatore, non posso mica reinizializzarlo a 0 
ogni volta che chiamo la funzione, e soprattutto la funzione e' chiamata da 
diverse funzioni, percio' deve gestire per i fatti suoi il contatore) oltre 
alla variabile global o ai namespaces, conosci qualche metodo per 
sostituire questa variabile static?
Giulio


 
ho capito dov'e' l'errore, cioe' ho intuito cosa fa la differenza.
intanto gcc mi da' un warning perche' comparo un int con un unsigned int 
(ma penso il warning si riferisca solo al fatto che il risultato puo' 
essere inatteso (magari se l'int e' minore di 0, per la rappresentazione a 
complemento a 2 degli int)), poi nulla accade se uso non tocco i, ma non 
appena provo anche solo un i++, ecco il Segmentation fault.


appena provo anche solo un i++, ecco il Segmentation fault.
Nessuna delle cose che hai detto mi sembra possa
essere (per come e' stata detta) la fonte del
problema. In C++ le variabili statiche ci sono
e funzionano benissimo, come anche e' assolutamente
lecito fare cose come "i++". Anche il warning sul
confronto fra signed e unsigned puo' essere una
fonte di problemi ma puo' anche essere assolutamente
innocuo (dipende se c'e' il rischio che tu ti venga
a trovare a confrontare valori negativi con valori
unsigned).
Il punto fondamentale su cui non devi fare confusione
e' che se *i sintomi* dell'errore non appaiono piu'
toccando a caso qua e la' senza capire la ragione
in realta' tu non stai correggendo il programma...
il programma che ottieni non e' cioe' affatto migliore
di quello che "si pianta" con segmentation fault;
e', se possibile, addirittura peggiore (e' meglio un
programma di fatturazione che si blocca con segv o
che stampa le fatture sbagliate ?).
Purtroppo non riesco a capire da quello che dici
quale potrebbe essere il problema reale e senza
vedere delle righe di codice non posso esserti di
nessun altro aiuto se non nel dirti che proseguendo
"a casaccio" non farai molta strada in un linguaggio
complicato come il C++.
HTH
Andrea

 ha scritto nel messaggio
news:3c773b7f...@news.tin.it...


 che stampa le fatture sbagliate ?).
penso che sarebbe opportuno includere un discorso del genere nelle FAQ: 
magari si potrebbe inserire in toto il tuo bel (e lungo) post dell'altro 
giorno. Non ricordo piu` chi si era preso l'incarico di aggiornare le 
FAQ, cmq butto li` questa proposta.
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it