|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
[C++] Segmentation Fault - un dubbio...
ciao a tutti,
volevo chiedervi se l'errore a run time di segmentation fault puo' essere dovuto anche al fatto che la memoria ram non e' sufficente per il tipo di dato che si sta elaborando. Vi spiego: sto lavorando si file di 2.5 mega l'uno, li leggo tutti e salvo il contenuto in una struttura dati a classi, in cui ciascun oggetto e' un'istanza di una classe di circa 400righe di codice.. e contiene oltre alle funzioni informazioni ridondanti prelevate dal file.. con file piccoli passati in input ... circa 100kb il programma non crasha per segmentation fault.. mentre con file grandi... circa 2,5 mega si. Non credo si tratti di un'errore logico di programmazione... il delete degli oggetti lo faccio solo una volta che ho creato tutti gli oggetti e fatto i calcoli che devo farvi su di essi.. Fatemi sapere cosa ne pensata.. grazie ! PS: la RAM del note su cui sto lavorando e' 512 RAM + 512 SWAP SPACE SU HD |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
no, il segfault non può essere dovuto all'insufficienza di memoria; o meglio forse si ma in casi rari, non penso che tu sia riuscito a riempire tutta la tua RAM più tutto il file di swap
![]() ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Buono buono, quindi e' un'errore con i puntatori/e-o indici di array vero?
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Ma se il file che do in input al programma non mi da errori di segmentation fault se piccolo mentre me li da se grande, cosa puo' essere?
Ho provato a creare, a partire dal file piccolo (e quindi si presume corretto) di 100kb un file da 2,5 mega, copiando di volta in volta i dati.. in modo tale che l'algoritmo del programma operi allo stesso modo (presumo che se non crasha con quello piccolo non dovrebbe crahare nemmeno con quello grande dato che i dati su cui lavora sono gli stessi e che i casi coperti sono quindi i medesimi).. ma col file da 2,5 mega crasha! Quindi non capisco come vedere dov'e' l'errore! Il dataset e' lo stesso e quindi anche le operazioni su di esso effettuate! Grazie! |
![]() |
![]() |
![]() |
#5 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() scherzi a parte, se posti il tuo codice (mi raccomando indentalo bene e usa il tag CODE) qualcuno del forum potrà aiutarti. |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Lo posterei volentieri, ma si tratta di 4 file di cui una classe da 400 righe di codice.. inoltre non e' un problema didattico, bensi un progetto di ricerca a cui sto lavorando e non posso postare il codice in quanto e' segreto aziendale.
Potresti dirmi qualcosa di più sui meccanismi di buffer overflow? Grazie mille! PS: qesto tipo di errore come si può scovare? *** glibc detected *** free(): invalid pointer: 0x08052350 *** Il programma non termina l'esecuzione, bensi prosegue.. ma ho il dubbio di aver fatto qualche cavolata da qualche parte se ci sono errori come questo.. Ultima modifica di shang84 : 05-11-2005 alle 15:14. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:01.