2013-08-12 4 views
9

Vedo spesso i seguenti termini in C++ domande dell'intervista:Qual è la differenza tra una trappola, un errore, un fallimento e l'aborto del programma?

  • programma abortire
  • errore
  • fallimento
  • trappola

non sono sicuro di vedere chiaramente le differenze tra quei termini. Qualcuno può fornire una spiegazione chiara e concisa?

Edit: la questione contesto è stata: "Cosa succede quando si elimina un puntatore due volte?" Ma conoscendo le differenze tra questi termini è più importante per me che solo la risposta.

+0

Le domande di intervista forniranno un contesto che manca chiaramente per dare la spiegazione di consisi che stai cercando. –

+1

Questo è troppo generico. Devi fornire una domanda di esempio. È, ad esempio, un errore per '# define' una parola chiave per la lingua, ma ogni compilatore ti permette di farlo senza una parola di avvertimento. Può anche essere un errore passare un parametro fuori intervallo a una funzione, che può causare l'interruzione di un programma. –

+1

'Cos'è un trap '- vedi http://stackoverflow.com/questions/3149175/che-è-la-differenza-trap-and-interrupt – devnull

risposta

0

Tutti questi termini sono un po 'vaghi, soprattutto errori e insuccessi. Fondamentalmente significano la stessa cosa generale: qualcosa non va. L'interruzione del programma si riferisce probabilmente alla chiamata alla funzione standard della libreria C abort, che aumenta il segnale SIGABRT. Ciò di solito provoca una terminazione del programma non onerosa, ma dipende dalla piattaforma e dal fatto che il segnale venga catturato o meno. Trap potrebbe riferirsi al rilevamento del segnale in generale, che è controllato dalla funzione standard della libreria C signal.

4

Questi non sono proprio particolari per C++.

  • L'interruzione è quando si termina il programma o un'operazione particolare a causa di un problema. Esiste una funzione di libreria C++ std::abort, ereditata dalla libreria C, che uccide il programma come se fosse un segnale esterno e non esegue i distruttori o la pulizia.

  • Un errore si verifica quando qualcosa va storto. In C++, molti tipi di errori non vengono necessariamente rilevati immediatamente. Il C++ specifica invece il comportamento non definito , che può comportare il danneggiamento della memoria silenziosa che può causare in seguito un comportamento anomalo misterioso.

  • Un errore è quando un programma fa la cosa sbagliata. Questo è un termine ingegneristico piuttosto generico. Il capo dai capelli a punta ha probabilmente più familiarità con questo concetto rispetto agli altri, perché è l'unico a cui un cliente sia realmente a conoscenza.

  • Un trap si verifica quando il programma rileva una condizione di errore e agisce di conseguenza.

Quindi, se si rileva che la rete è andato giù, e mostrano un messaggio per l'utente, ad esempio "non poteva continuare; il documento è stato salvato automaticamente" prima di uscire, allora si hanno intrappolato un errore e abortito, ma ciononostante c'è stato un fallimento.

+2

Un trap viene rilevato più spesso dall'hardware (MMU, ecc.). –

+0

@JamesKanze Penso che sia un termine piuttosto generico. "Ho trovato un nuovo tipo di errore che dobbiamo catturare" è qualcosa che direi in qualsiasi disciplina del software. – Potatoswatter

+0

Interessante. Non l'ho mai sentito usato in questo modo; "Ho trovato un nuovo tipo di errore che dobbiamo catturare" sembra più probabile per me. Ma il mio pensiero principale è quando la lingua parla di una rappresentazione "intrappolata"; un modello di bit che causa un trap hardware (che invia il programma a un gestore trap nel sistema operativo). –