Domanda

Ho un codice in Visual Studio 2008 in C ++ che funziona con i file solo da fopen e fclose. Tutto funziona perfettamente in modalità debug. e ho provato con diversi set di dati. Ma non funziona nella modalità di rilascio. Si blocca tutto il tempo. Ho spento tutte le ottimizzazioni, inoltre v'è alcuna dipendenza a nulla (nel linker), e anche io ho posto questi:

Ottimizzazione: Disabilitato (/ od) Mantenere Unreferenced dati. Non rimuovere ridondanti Ottimizza per Windows98: NO

ho ancora continuo a chiedermi come non dovrebbe funzionare in queste circostanze. Che altro dovrei spegnere per farlo funzionare come in modalità debug?

Credo che se funziona in modalità di rilascio, ma non in modalità debug, potrebbe essere un errore di codifica, ma il contrario sembra strano. non è vero?

Apprezzo tutto l'aiuto. --Nima

È stato utile?

Soluzione

modalità Debug spesso inizializzare le allocazioni di dati heap. Il programma potrebbe dipendere da questo comportamento. Cercare le variabili e buffer che non sono sempre inizializzate.

Altri suggerimenti

1) Assicurati di ogni e qualsiasi codice che dipende dalla macro del preprocessore.
2) Uso assert () per verificare precondizioni stato del programma. Questi non devono essere tenuti a flusso del programma impatto (es. Rimuovendo la selezione consentirebbe ancora il codice per fornire lo stesso risultato finale) perché asserzione è una macro. L'uso regolare condizionali di runtime quando un'asserzione non lo farà.
3) In effetti, non lasciare mai una variabile in uno stato non inizializzato.

Di gran lunga la spiegazione più probabile è che differiscono comportamento indefinito nelle due modalità causati dalla memoria non inizializzata. Mancanza di filo di sicurezza e problemi di codice di sincronizzazione possono anche presentano questo tipo di comportamento a causa di diversi ambienti temporanee tra debug e rilascio, ma se il programma non è multi-thread poi, ovviamente, questo non può essere esso.

I aveva sperimentato questo e nel mio caso è stato a causa di una delle mie serie di struct, che supponiamo di avere solo X indice, ma la mia looping che controllare questo struct era finito il controllo per X + 1 index. Interessante è il debug modalità stava funzionando bene anche se ero in Visual C ++ 2005.

Ho trascorso un paio d'ore, mettendo in printf nella mia linea di codifica per riga per catturare l'insetto. Chiunque abbia buon modo per eseguire il debug di questo tipo di errore per favore fatemelo sapere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top