PDA

Visualizza la versione completa : [C++] Errore: Segmentation Fault


Acciues
05-05-2008, 04:07
Ciao a tutti!!!
Ho un problema che mi sta facendo impazzire!!!
In pratica devo compilare ed eseguire un programma...è un progeto in fase di costruzione di un compilatore....e mi da il seguente errore:

/bin/CompilatoreProgetto.bin: line 1: 9130 Segmentation fault

La cosa assurda è ke a ad un mio collega, lo stesso e identico codice va...e a me no!!
Ah...dimenticavo....ho Ubuntu Hardy 8.04 e compilo cn g++

VI PREGO AIUTATEMIIIIII...!!!!

Vi posto la parte di copice che mi da problemi:

#include <FlexLexer.h>
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include "token.hh"
#include "analyzer.hh"
#include "countOccurrences.hh"
#include "identifiers_table.h"

using namespace std;

int main( int /* argc */, char** /* argv */ ){

Analyzer* lexer = new Analyzer(&cin,&cerr);
try {
while(lexer->yylex() != 0)
identifiers_table symbols(lexer->getTokenList());
if(symbols.errors.empty()==false){
throw symbols.errors;
}
}
catch (list<ParserError> errors) {
list<ParserError>::iterator i = errors.begin();
for(;i!=errors.end();i++){ //Scorro la lista di errori e li stampo a video
cerr << (*i) << endl;
}
}
delete lexer;
return 0;
}

GRAZIE IN ANTICIPO A TUTTI!

PeppePes88
05-05-2008, 12:43
Ormai il progetto di MARTINI si fa su HTML!!

L'errore che ottieni e causato da un indirizzo di memoria sbagliato, puo essere un accesso non consentito, comunque il problema sta su un puntatore (presumo)!

Nel mai che hai postato non c'è un errore di questo tipo... controlla meglio gli altri file, dove usi i puntatori e l'allocazione dinamica della memoria!

Acciues
05-05-2008, 13:02
No no....ho controllato...nn mi sembra che ci sia nessun errore!!
Comunque al mio collega, lo stesso e identico programma va bene!
Ho letto su vari forum che bisognerebbe allocare la memoria tramite funzioni malloc, callog e cose varie....ho provato ma niente da fare....sempre lo stesso problema!

shodan
05-05-2008, 13:19
Originariamente inviato da Acciues

Ho letto su vari forum che bisognerebbe allocare la memoria tramite funzioni malloc, callog e cose varie...

Falso. In C++ si usano new e delete per la gestione della memoria.

A me sembra strano quel catch. In genere il paramento è un reference non una copia.

catch (list<ParserError>& errors)

Però come dice PeppePes88 il problema è sicuramente un puntatore su cui si fa una doppia delete.

PeppePes88
05-05-2008, 13:22
le funzioni malloc calloc free realloc sono le funzioni per gestire la memoria dinamica in c! I c++ bastano e avanzano new e delete..

Bo io ricontrolato ora il main! ma a me sembra correto... Spera che ti possa aiutare qualcuno piu di me! symbols.errors e una lista che contiene Parser error che quindi viene caturata dal cacth di sotto??

menphisx
05-05-2008, 18:44
1. Non puoi avviarlo con gdb così magari ci dai più informazioni ?
2. Identazione e tag CODE :dottò:
3. Non è detto che il problema sia nel codice che hai postato, sei sicuro che per ogni new ci sia una delete, e che gli array non escano mai dai loro limiti ?
4. Usa gli smart pointers se vuoi avere meno problemi.

pallinopinco
05-05-2008, 18:54
Bo io ricontrolato ora il main! ma a me sembra correto... Spera che ti possa aiutare qualcuno piu di me! symbols.errors e una lista che contiene Parser error che quindi viene caturata dal cacth di sotto??

Le doppie non si pagano a parte... :fagiano:

Acciues
05-05-2008, 20:43
Perfetto ragazzi!!!
Ho risolto...era un puntatore che nn avanzavo! Adesso tutto ok!
Vi ringrazio per la disponibilità!
Ciao!

Loading