2009-07-26 15 views
17

Mientras se ejecuta mi programa me sale este error:¿Cuál es el significado de este error C++ std :: length_error

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

Sé que no se puede hacer mucho sin el código, pero creo que este error es demasiado profundo en el código para copiarlo todo. Tal vez pueda resolverlo si entiendo lo que significa este error. ¿Es esto un signo de un problema con la lectura o la escritura en la dirección de memoria incorrecta?

¿Hay algo que pueda hacer para obtener más información sobre el problema de mi programa?

+0

¿Puede publicar algún fragmento de código en el que está accediendo a la cadena? –

+1

The String no es el problema. Después de algunos cambios menores y de agregar mensajes de depuración, obtengo un segfault real;) – Janusz

+1

Además de la respuesta de Kevin: ¿Tal vez hiciste algunos cálculos que darían como resultado una longitud de cadena negativa? Debido a que la longitud de la cadena es (normalmente) almacenada como un valor sin signo, su valor negativo daría lugar a un valor positivo extremadamente grande que es mayor que std :: string :: max_size(). – mmmmmmmm

Respuesta

20

Significa que trataste de crear una cadena más grande que 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

¿Podría eso también significar que mi cuerda ya no está en la memoria y estoy leyendo basura al azar de la memoria hasta que la cuerda sea demasiado grande? – Janusz

+14

Puede crear esta situación accidentalmente tratando de crear una cadena de tamaño -1. Los tamaños de cadena no tienen signo, por lo que -1 es en realidad el entero más grande posible sin signo. – MSalters

0

Esto es un error en el modo de depuración con VS2005. Cuando lo cambio al modo de lanzamiento, todo funciona.

Bueno, el tiempo de ejecución de depuración vc causa esto, eso es todo.

+4

Bienvenido a StackOverflow y gracias por publicarlo. Eche un vistazo a [Cómo responder] (http://stackoverflow.com/questions/how-to-answer). –

+0

El cambio de Debug a Release funcionó para mí también, pero en VS2008 de 64 bits. Se estrelló cuando el depurador estaba golpeando una línea que creaba un objeto de matriz muy grande. Supongo que estaba tratando de asignar suficiente espacio para mostrar la matriz como una cadena y que terminó chocando. – partofthething

1

Sé que esta es una vieja pregunta, pero me encontré con el mismo problema. Usando Linux con gcc.

Desarmado de la función mostró una gran cantidad de saltos en el código, donde se produjo la excepción, que no debería estar allí. Al final, una compilación limpia resolvió el problema para mí.

Cuestiones relacionadas