Nat*_*one 7 c++ crash debugging iterator visual-studio-2008
当我尝试禁用已检查的迭代器时,我在调试模式下运行vs2008 SP1时遇到了一些麻烦.以下程序重现问题(字符串析构函数崩溃):
#define _HAS_ITERATOR_DEBUGGING 0
#include <sstream>
int do_stuff(std::string const& text)
{
std::string::const_iterator i(text.end());
return 0;
}
int main()
{
std::ostringstream os;
os << "some_text";
return do_stuff(os.str());
}
Run Code Online (Sandbox Code Playgroud)
我在gamdev.net上发现了类似的帖子,讨论了在vs2005中遇到这个问题.该帖子中的示例程序按原样编译为2008 SP1 - 但是当我将其修改为使用ostringstream时,我能够解决问题.
从调试器中调试来看,它看起来像是从堆栈中弹出迭代器,然后尝试在_Orphan_All中使用它们,这是某种迭代器检查清理代码......
任何人都可以重现这个问题或者告诉我发生了什么事吗?
谢谢!
我刚刚在Windows XP上的VS2008中尝试了这个,并且在SP1和VS2008之前都有关于缓冲区溢出的警告.
有趣的是,问题似乎集中在通过引用或值将字符串传递给do_stuff - 如果我使用原始代码,它会抱怨缓冲区溢出但是如果我按值传递字符串,它运行正常.这是多线程调试DLL运行时.当您喜欢静态MT Debug运行时时,错误消失.
在这两种情况下,都会关闭预编译的头文件,并且已从项目中删除通常生成预编译头文件的文件.
在MSDN上阅读这篇文章后,我想知道问题是否源于几个C++标准库类实际上驻留在运行时库中,如果你使用调试DLL运行时构建(只是尝试将VS2008生成的二进制文件链接到一个早期的图书馆,并留意未解决的外部确认这一点).
| 归档时间: |
|
| 查看次数: |
2350 次 |
| 最近记录: |