Newsgroup: it.comp.programmare.win32
Titolo: errore in esecuzione

Sto sviluppando una applicazione win32 con il Borland Builder 3 .
Durante la fase di debug il compilatore mi genera una eccezione di
tipo EACCES VIOLATION AT ADDRESS 0X8B ecct. 
L'help del compilatore mi dice che questa eccezione si verifca quando
si tenta di accedere ad una pagina di memoria protetta ,oppure si
rilascia un puntatore non valido .
Insomma dovrebbe esserci un errore da qualche parte che fa riferimento
ad una zona di memoria non valida solo che no riesco ad individuarlo
in quanto l'eccezione si verifica in maniera del tutto casuale e
quindi non in un punto preciso del programma.
Il debugger inoltre quando visualizza l'eccezione visualizza la
finestra CPU ma entrambi i programmi (quello in esecuzione e il
debugger ) rimangono bloccati .
Com faccio a capire dove trovare l'errore ?
Sono centinaia e centinaia di righe di codice e non posso ripassarle
tutte . Come posso fare per sapere il quale punto si genera
l'eccezione ?
grazie
 


Non conosco l'ambiente Borland ma con 
vs.net
 hai a disposizione la finestra 
di call stack e ragionevolmente dovrebbe esserci anche lě.
Nella call stack vedi la lista dei chiamanti che hanno portato 
all'esecuzione del codice che poi ha dato errore. Errore probabilmente 
dovuto ad un parametro errato passato a quel codice che vedi.
Come regolette sempre valide, nel tuo listato dovresti sempre:
- mettere a null i ptr dopo che ne hai fatto la delete o la delete[]. 
Infatti fare delete null; č lecito
- assicurarti *sempre* che la new sia associata alla delete e la new[] alla 
delete[]. Se le incroci il risultato č imprevedibile e puň anche portare a 
errori come quello che hai avuto.
- fare un pensierino all'uso degli smart pointer che gestiscono i puntatori 
all'interno delle classi. Cosě quando la classe esce dallo scope in cui le 
usi, viene fatta automaticamente la delete della memoria associata.
-- 
Raffaele Rialdi
Microsoft .NET MVP 
http://mvp.support.microsoft.com
 -
http://italy.mvps.org
 UGIdotNET - User Group Italiano .NET
http://www.ugidotnet.org
 Weblog: 
http://blogs.ugidotnet.org/raffaele

dovuto ad un parametro errato passato a quel codice che vedi.
Il debugger e'bloccato e va in errore perfino explorer . Non posso
visualizzare niente nel debugger . Il codice chi rimane nella finestra
del debugger sono instruzioni pop e ret ma visivamente non si riesce a
capire a quale routine fa riferimento .
Io penso debba volerci una utility esterna che monitorizza
l'applicazione che si blocca ma non conosco niente al riguardo e il
mio compilatore essendo una versione standard non offre alcun modo
,credo,di poter monitorare questa situazione.
Non so come uscirne e mi spiace perche' fino ad adesso avevo fatto un
buon lavoro...

 buon lavoro...
Prova a vedere se MemProof ti può essere di aiuto: 
http://www.automatedqa.com/products/memproof/
.
Steve. 

 ,credo,di poter monitorare questa situazione.
Hai almeno due possibilità:
1. Scaricati da 
www.microsoft.com/ddk
 i debugging tools che contengono 
Windbg, un debugger molto potente anche se non user friendly come visual 
studio. Assicurati che la tua applicazione sia stata generata con i PDB 
(cioè i simboli). Questo ti garantisce molte più possibilità di capire dove 
accade il problema.
Se il crash avviene dentro una dll di sistema perchè gli passi un parametro 
sbagliato, vedrai un ammasso di assembler.
In questo caso puoi configurare Windbg in modo che scarichi i simboli di 
Windows da Internet. Così facendo saprai quale API stavi eseguendo durante 
il crash.
2. Puoi configurare drwtsn32 in modo che crei un dump della tua applicazione 
(che va lanciata senza debugger) e quando va in crash, interviene dr watson 
che crea il dump. Il dump lo puoi vedere con un debugger, come ad esempio 
Windbg.



http://www.automatedqa.com/products/memproof/
.
Ringrazio entrambi per i preziosi consigli.
Vedro se riesco a venirne fuori .

Scusa ,
non esiste qualcosa di simile a MemProof per Visual C++ 6 ?