PDA

Visualizza la versione completa : [C++] Memory leak utility per Dev-cpp


Kilin
14-06-2008, 17:51
ciao a tutti...

sto sviluppando un progetto abbastanza ampio, e mi è saltato fuori un errore parecchio strano che non riesco a scovare... Mi si chiude il programma, e facendo un debug Dev cpp mi dice che c'è un segmentation fault.. Commentando alcune righe che NON vengono eseguite nella funzionalità che sto testando il programma funziona, quindi dev'essere una particolare configurazione di memoria che crea problemi, qualcosa di non deallocato, o deallocato due volte, o acceduto dopo che è stato deallocato..

Mi è stato consigliato di usare un programma di memory leak per scovare l'errore, ma cercando sul web ho trovato soltanto delle utility per Visual Studio, che mi da problemi. Mi servirebbe qualcosa per dev c++, o qualcos'altro che sappiate consigliarmi...

Qualcuno mi sa indicare qualcosa? Sto impazzendo con questo problema, che ha avuto il tempismo di presentarsi a tre giorni dalla consegna del progetto...

grazie a tutti

oregon
14-06-2008, 18:03
Se hai individuato la riga (o la funzione) in cui si verifica il problema, con un po' di debugging (esecuzione linea per linea), non dovrebbe essere difficile individuare la causa.

Il memory leak non c'entra con il segmentation fault ... quello strumento non ti servirebbe ...

Se puoi mostrare il codice e dare qualche indicazione, puo' darsi che si scopra il problema ...

Kilin
14-06-2008, 18:12
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:




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:


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..

Loading