View Full Version : [C] Uscita immediata
Ciao, sono ancora alle prese col programmone C (non mfc) che sto tentando di modificare.
Sono incriccato sull'uscita, perchè quando il programma riceve un comando di close, si chiude ma genera l'errore generico di windows ("Ha esguito un op.non valida....bla bla) , ma solo in runtime, in debug funzia perfettamente.
Io vorrei fare una DestroyWindow(hwnd_finestra) e stop, fine della trasmissione, ma non ci riesco.
C'è un comando che fa fermare completamente il run del programma ? (così magari mi evito l'errore!)
variabilepippo
25-09-2007, 10:52
Dovremmo vedere il tuo codice per capire cosa causi l'eccezione. Ci sono molti metodi (corretti) per chiudere un'applicazione...
Lo so.
Sarebbe il metodo più giusto e corretto, ma QUESTO codice fa impressione....io purtroppo non sono un programmatore C "vero", ma per necessità della mia ditta ho dovuto metter mano a sto mostro che è stato fatto anni e anni fa da un tizio che neanche era italiano (e commenti al codice manco sapeva cos'erano, maledetto lui).
Purtroppo in questo modo mi è difficile reperire info e chiedere aiuto, devo andare a 'naso' e debugging (uso il VC++ 6 per farlo) a manetta (breakpoints come se piovesse, per capire cosa fa il codice).
variabilepippo
25-09-2007, 11:22
Allora non posso fare altro che rimandarti all'esempio MSDN della funzione DestroyWindow (http://msdn2.microsoft.com/en-us/library/ms632598.aspx#destroying_win) e suggerirti di acquistare un buon libro sulla programmazione Windows, altrimenti rischi di aggiungere molte forchettate di spaghetti al pastrocchio che stai cercando di modificare.
Ehh...lo so...mannaggia.
Cmq la cosa più assurda è che se compilo in release, l'errore in uscita c'è, se compilo ed eseguo in debug, l'errore non si presenta e il prog si chiude regolarmente !!!
Una cosa che mi dà fastidio nel debug, è che all'avvio mi dà un errore "Abnormal block termination - Annulla - Riprova - Ignora" e non capisco a cosa sia dovuto...(visto che poi il programma va ) :muro:
variabilepippo
25-09-2007, 13:56
Cmq la cosa più assurda è che se compilo in release, l'errore in uscita c'è, se compilo ed eseguo in debug, l'errore non si presenta e il prog si chiude regolarmente
Non è un cosa poi tanto assurda, il codice prodotto dalle configurazioni Release e Debug è spesso sostanzialmente diverso. Se poi nel codice si fa uso di programmazione condizionale per distinguere le 2 modalità la situazione si ingarbuglia ulteriormente. Non di rado questi bug sono molto difficili da scovare (altre volte l'errore di programmazione è macroscopico!).
Cerca di circoscrivere la porzione che crea problemi con dei log su file, memorizzi su file l'esito di ogni chiamata.
Di preciso dice "DAMAGE After normal block (#401) - Abort - Retry - Ignore"
Maremma impestata.
:mc:
variabilepippo
25-09-2007, 14:15
Quel problema solitamente è causato da una errata gestione della memoria dinamica o dei puntatori. Senza vedere TUTTO il sorgente è impossibile risalire alle cause.
Presta attenzione alle allocazioni ed alle deallocazioni di memoria, cerca di individuare eventuali scritture oltre i limiti consentiti.
Ci sono degli strumenti di terze parti (http://www.automatedqa.com/) che automatizzano l'individuazione di errori e memory leaks, purtroppo spesso non sono a "buon mercato". :rolleyes:
Gestione della memoria eh ?
Ho cercato un pò tutti i "malloc" che ho in avvio e ho aggiunto un "+1" al "size"...beh, l'errore è sparito!
Non è pulita la soluzione, ma per ora mi leva uno dei 'sassi' che ho nelle scarpe.
E colgo l'occasione per ringraziare te e tutti gli altri programmatori "seri" che mi danno consigli e aiuti qui su HWU.
Grazie ragazzi!
:fagiano:
Ho cercato un pò tutti i "malloc" che ho in avvio e ho aggiunto un "+1" al "size"...beh, l'errore è sparito!
Appunto ;) Quello è un problema di gestione della memoria dinamica :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.