2009-07-26 13 views
17

Durante l'esecuzione il mio programma ottengo questo errore:Qual è il significato di questo C++ Errore std :: length_error

terminate called after throwing an instance of 'std::length_error' 
    what(): basic_string::_S_create 
Abort trap 

So che non si può fare molto senza il codice, ma penso che questo errore è troppo in profondità nel codice per copiarne tutto. Forse riesco a capirlo se capisco cosa significa questo errore. Si tratta di un segno per un problema con la lettura o la scrittura sull'indirizzo di memoria sbagliato?

C'è qualcosa che posso fare per ottenere maggiori informazioni sul problema dal mio programma?

+0

È possibile inserire un pezzo di codice nel punto in cui si accede alla stringa? –

+1

La stringa non è il problema. Dopo alcune modifiche minori e l'aggiunta di messaggi di debug ottengo un vero segfault;) – Janusz

+1

In aggiunta alla risposta di Kevin: Forse hai fatto dei calcoli che avrebbero portato a una lunghezza di stringa negativa? Poiché la lunghezza della stringa è (normalmente) memorizzata come valore senza segno, il valore negativo porterebbe a un valore positivo estremamente grande che è per lo più maggiore di std :: string :: max_size()! – mmmmmmmm

risposta

20

Significa che si è tentato di creare una stringa più grande di std :: string :: max_size().

http://msdn.microsoft.com/en-us/library/as4axahk(VS.80).aspx

An exception of type length_error Class is thrown when an operation produces a string with a length greater than the maximum size.

+2

Potrebbe anche significare che la mia stringa non è più in memoria e sto leggendo la posta indesiderata dalla memoria finché la stringa non è troppo grande? – Janusz

+14

È possibile creare accidentalmente questa situazione cercando di creare una stringa di dimensioni -1. Le dimensioni delle stringhe sono senza segno, quindi -1 è in realtà il più grande numero intero senza segno possibile. – MSalters

0

Si tratta di un errore nella modalità di debug con VS2005. Quando lo cambio in modalità di rilascio, tutto funziona.

Bene, il runtime di debug vc causa questo, questo è tutto.

+4

Benvenuti in StackOverflow e grazie per la pubblicazione. Si prega di dare un'occhiata a [Come rispondere] (http://stackoverflow.com/questions/how-to-answer). –

+0

Anche il passaggio da debug a release ha funzionato anche per me, ma in VS2008 a 64 bit. Stava andando in crash quando il debugger stava colpendo una linea che creava un oggetto matrice molto grande. Immagino che stia cercando di allocare abbastanza spazio per visualizzare la matrice come una stringa e questo ha finito per bloccarlo. – partofthething

1

So che questa è una vecchia domanda, ma mi sono imbattuto nello stesso problema. Uso di Linux con gcc.

Il disassemblaggio della funzione ha mostrato molti salti nel codice, dove è stata generata l'eccezione, che non dovrebbe essere presente. Alla fine, una build pulita ha risolto il problema per me.