这很好用:
std::vector<int> v;
v.push_back(123);
但这会抛出一个std :: length_error:
std::vector<uint32_t> v;// or vector<unsigned __int32>
v.push_back(123);
似乎是通过调整大小来触发的,因为
std::vector<uint32_t> v;
v.reserve(2);
触发调试断言"iterator not dereferencable"
。
这在Visual Studio 2008上发生,但相同的代码在Mac和Linux上运行良好。任何人都可以建议一种缩小搜索范围的方法吗?
更新:
在这个项目中,鼠标的静态和动态链接依赖项使得查找违规库变得非常耗时。我放弃并重建了源的每一个依赖。我失去了两天的生活,仍然不知道问题的确切位置,但应用程序运行!谢谢你的帮助。
答案 0 :(得分:1)
这个
#include <iostream>
#include <vector>
int main()
{
std::vector<unsigned __int32> v;
v.reserve(2);
std::cout << v.capacity() << '\n';
return 0;
}
在VS 2008中,在我没有任何打嗝的情况下运行。它打印2
。
这对你有什么用?如果它也有效,那么我的前几个猜测是:
了解这一点的方法是将其提炼到展示行为的最小可能测试用例。 (这不应超过50LoC,理想情况下,它是10.)如果您在执行此操作时未发现问题,请将示例附加到您的问题中。
答案 1 :(得分:0)
由于示例代码正常,您的样本必须是错误的:-)
尝试通过小步骤使您的示例更像真实代码来更接近问题。在某些时候它应该停止工作,然后你可以找出罪魁祸首。
答案 2 :(得分:0)
你能检查你的实现是否有两个或更多的uint32_t的typedef?特别是在不同的名称空间下(我知道机会很小,但它可能是值得的 - 在寻求平台兼容性时,不同的库会尝试将特定的内存大小映射到一个类型,其中一个可能已经滑落了。)
答案 3 :(得分:0)
VC ++ 2008不提供ISO C99标题,因此您必须以某种方式提供该定义;也许这个定义是有缺陷的。