【发布时间】:2009-11-17 09:41:13
【问题描述】:
这很好用:
std::vector<int> v;
v.push_back(123);
但这会引发 std::length_error:
std::vector<uint32_t> v;// or vector<unsigned __int32>
v.push_back(123);
好像是resize触发的,因为
std::vector<uint32_t> v;
v.reserve(2);
触发调试断言"iterator not dereferencable"。
这发生在 Visual Studio 2008 上,但相同的代码在 Mac 和 Linux 上运行良好。任何人都可以提出一种缩小搜索范围的方法吗?
更新:
该项目中的静态和动态链接依赖项的老鼠巢使得查找有问题的库过于耗时。我放弃并从源头重建了每个依赖项。我失去了两天的生命,仍然不知道问题出在哪里,但是应用程序运行了!感谢您的帮助。
【问题讨论】:
-
由于 STL 在源代码中,您只需将调试器设置为在抛出异常时停止并检查那里有什么问题。
-
出现问题的最小可编译源,拜托!
-
什么是 uint32_t 定义为,例如。使用“unsigned __int32”执行上述操作非常适合我......
-
在我的机器上工作 :-) pastebin.org/54412
-
它在模板方法的深处炸毁,签名为“template
inline _FwdIt _Uninit_copy(_InIt _First, _InIt _Last, _FwdIt _Dest, _Alloc&, _Scalar_ptr_iterator_tag, _Range_checked_iterator_tag) “我没有希望解析。如果可以信任调试器,那么在调用此方法时,迭代器参数似乎是伪造的。
标签: c++ stl visual-c++