这个C++错误std::length_error是什么意思?

25

运行我的程序时,我遇到了这个错误:

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

我知道没有代码你做不了太多事情,但我认为这个错误太深了,无法复制所有代码。如果我能理解这个错误的含义,也许我可以想出一个解决方法。这是一个关于在错误内存地址读写的问题吗?

有没有什么方法可以从我的程序中获取更多有关问题的信息呢?


你能贴出一段代码,在其中访问字符串吗? - sameer karjatkar
1
字符串不是问题。经过一些小改动和添加调试信息后,我得到了一个真正的段错误 ;) - Janusz
1
除了Kevin的答案之外:也许您进行了一些计算,导致字符串长度为负数?因为字符串长度(通常)存储为无符号值,您的负值将导致一个极大的正值,该值大多数情况下大于std::string::max_size()! - mmmmmmmm
3个回答

28

4
这是否意味着我的字符串已不再存储在内存中,而我正在读取内存中的随机数据,直到字符串太大而被覆盖? - Janusz
20
您可能会通过尝试创建大小为-1的字符串来意外地创建这种情况。字符串大小是无符号的,因此-1实际上是最大的无符号整数。 - MSalters

0

我知道这是一个老问题,但我遇到了同样的问题。 使用带有gcc的Linux。

反汇编函数显示代码中有很多跳转,异常被抛出,这些跳转不应该存在。 最终,进行一次干净的构建解决了我的问题。


-1

这是在VS2005的调试模式下出现的错误。当我将其改为发布模式时,一切都正常了。

嗯,这是由于vc调试运行时引起的,仅此而已。


5
欢迎来到StackOverflow并感谢您的发帖。请查看如何回答 - Serge Belov
1
切换从Debug到Release对我也起了作用,但是在VS2008 64位上。当调试器遇到创建一个非常大的矩阵对象的行时,它会崩溃。我想它试图分配足够的空间来显示矩阵作为字符串,结果导致崩溃。 - partofthething

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接