Ho provato col debug del dev, ma non riesco ad ottenere molte informazioni...Ad ogni modo la riga a cui sembra fermarsi è in questo costruttore:
codice:
Var(symb_map::iterator var_map):label(var_map->first), identif(var_map){
Expression::type = var_map->second.first; // <--------------------
}
Quel costruttore viene chiamato con questo argomento:
codice:
pair<bool,symb_map::iterator> result = st->isDeclared((*i)->getName());
e1 = new Var(result.second);
Il progetto che sto facendo è un compilatore... Quello è il costruttore di una variabile riconosciuta dal compilatore. L'aver pensato al memory leak o cose così è perchè questo errore si manifesta solo in un programma che fa la somma dei primi 2000 numeri: se nella somma metto i primi 1937 numeri funziona, se aggiungo un operando da il problema. Ecco anche perchè col debug passo passo è un po' un problema capire qualcosa, perchè il programma è volutamente pesante, per mettere alla prova la rapidità del nostro compilatore.
(la somma viene fatta così: int var1 = 1; int var2=2; .... int var2000 = 2000; var0 = var1 + var2 + ... + var2000; return var0
Le righe che commentate tolgono il problema non c'entrano niente, si trovano all'interno di un if in cui si entra soltanto quando si cerca di riconoscere un'espressione tra parentesi (che non sono presenti nel programma che da errore): infatti mettendo delle stampe di debug queste non vengono stampate.
Non so, mi rendo conto che è difficile capire qualcosa da queste poche righe, ma d'altra parte il progetto è ampio, non è un file o due che posso postare qui..