Segmentation Fault su fclose()

Area di discussione libera.

Moderatore: Staff

Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Messaggio da targzeta »

Prova a mettere n=0.

Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Messaggio da Blizzard »

niente :D

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Messaggio da targzeta »

Blizzard ha scritto:niente :D
Allora,
l'errore è qui:

Codice: Seleziona tutto

memset(temp,0,2048);
temp ti viene allocata dalla getline, e poi tu svuoti 2048 byte, ma la getline non allora 2048 byte, bensì n. quindi dovresti modifcare, a parte l'n=0 che ti ho detto prima, anche:

Codice: Seleziona tutto

memset(temp,0,n);
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Messaggio da Blizzard »

ciao!

hai immensamente ragione!!!

Primo perchè avevo scritto proprio una cavolata di quelle enormi!
e Secondo perchè in un modo o nell'altro mi esplodeva la fclose e soprattutto solo in quella sezione di codice :D (i misteri dei buffer overflow)

Ti metto uno special thanks sul CVS update che faccio adesso :D

ciao
Gio

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Messaggio da Blizzard »

ah!
una cosa altrettanto divertente a questo punto e che ieri avevo risolto con una fcloseall()
:badgrin: :badgrin: :badgrin:
solo ora ne comincio a capire il motivo....

ciao!

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Messaggio da targzeta »

Blizzard ha scritto:...
e Secondo perchè in un modo o nell'altro mi esplodeva la fclose e soprattutto solo in quella sezione di codice :D (i misteri dei buffer overflow)...
Se è una domanda, la risposta è semplice, dal momento che, come hai detto tu, andavi in buffer overflow, ci sono due possibili scenari:
1) Il kernel ti dà un segfault appena vai in buffer owerflow, questo perchè accedi ad un area di memoria che non è tua.
2) Prima o poi andrai in segfault, il caso più frequente. Visto che hai sovrascritto area di memoria che ti apparteneva, hai probabilmente eliminato informazioni che ti servivano e che non andavano modificate (come ad esempio modificare la locazione di memoria della variabile stream), quando proverai ad accedere a questi dati non troverai più quello che ti aspettavi e, se erano puntatori, ora punteranno chissà dove, quindi, probabile segfault.

Come avrai capito il tuo caso era il secondo :).

Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
Blizzard
Master
Master
Messaggi: 1509
Iscritto il: mar 2 gen 2007, 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox
Contatta:

Messaggio da Blizzard »

Se è una domanda
No..No... era un'affermazione :P me ne sono accorto subito che ricadevo nel secondo caso che mi hai descritto appena mi sono reso conto della dimensione variabile della stringa e di io che ne resettavo sempre 2048 byte a 0 :D

ciao
Gio

Rispondi