这个 C++ 错误 std::length_error 是啥意思
Posted
技术标签:
【中文标题】这个 C++ 错误 std::length_error 是啥意思【英文标题】:What is the meaning of this C++ Error std::length_error这个 C++ 错误 std::length_error 是什么意思 【发布时间】:2009-07-26 04:07:43 【问题描述】:在运行我的程序时出现此错误:
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_S_create
Abort trap
我知道没有代码你不能做很多事情,但我认为这个错误在代码中太深了,无法复制所有代码。如果我理解这个错误的含义,也许我可以弄清楚。 这是在错误的内存地址读取或写入问题的迹象吗?
我可以做些什么来从我的程序中获取有关问题的更多信息吗?
【问题讨论】:
你能在你访问字符串的地方贴一些代码吗? 字符串不是问题。经过一些小的更改并添加调试消息后,我得到了一个真正的段错误;) 除了凯文的回答:也许你做了一些会导致字符串长度为负的计算?因为字符串长度(通常)存储为无符号值,所以负值会导致非常大的正值,该正值大多大于 std::string::max_size()! 【参考方案1】:这意味着你试图创建一个大于 std::string::max_size() 的字符串。
http://msdn.microsoft.com/en-us/library/as4axahk(VS.80).aspx
length_error 类的异常 当操作产生一个 长度大于 最大尺寸。
【讨论】:
这是否也意味着我的字符串不再在内存中,我正在从内存中读取随机垃圾,直到字符串太大? 您可能会通过尝试创建大小为 -1 的字符串来意外创建这种情况。字符串大小是无符号的,所以 -1 实际上是最大可能的无符号整数。【参考方案2】:我知道这是一个老问题,但我遇到了同样的问题。 使用带有 gcc 的 Linux。
反汇编函数显示代码中有很多跳转,抛出异常的地方不应该存在。 最后,Clean Build 为我解决了这个问题。
【讨论】:
【参考方案3】:这是 VS2005 调试模式下的错误。当我将其更改为发布模式时,一切正常。
嗯,vc 调试运行时会导致这个,仅此而已。
【讨论】:
欢迎来到 *** 并感谢您的发帖。请看How to Answer。 从调试切换到发布也对我有用,但在 VS2008 64 位中。当我调试器遇到创建一个非常大的矩阵对象的行时,它崩溃了。我猜它试图分配足够的空间来将矩阵显示为字符串,结果导致它崩溃。以上是关于这个 C++ 错误 std::length_error 是啥意思的主要内容,如果未能解决你的问题,请参考以下文章
这个 C++ 错误 std::length_error 是啥意思