- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
std::string 文件名;
在此代码中:osg::Image* image = osgDB::readImageFile(filename + ".dicom");
osg::Image 类型变量:image 从读取的文件中获取错误的返回值。调试到上面一行,watch窗口显示如下:
第一行和第二行指示的_fileName(std::string类型)值都是“digest”,但在第四行中,_fileName的值竟然是“iiiiii\x*6”,容量等于0.
按照我的理解,watch窗口中第四行的_fileName应该和第一行和第二行的_fileName表示的是同一个osg::Image的成员变量。因此,我认为调试监 window 口中的所有 _fileName 都应该具有相同的值。但是,我不确定为什么会有这样的差异。
最佳答案
std::string
的 MSVC++ 实现对短字符串和长字符串使用不同的存储策略。短字符串(16 字节或更少)存储在直接嵌入 std::string
对象(您将在原始 View 中将其视为 _Bx._Buf
)的缓冲区中。长字符串存储在位于别处(由 _Bx._Ptr
指向)的独立分配的内存块中。
如果您违反了 std::string
对象的完整性,您可能很容易陷入您所描述的情况。对象认为数据应该存储在外部缓冲区中,但实际上它存储在内部缓冲区中,反之亦然。这也可能很容易混淆调试器。
我建议您打开 std::string
对象的原始 View 并检查它在 _Bx._Buf
和 _Bx._Ptr
中显示的内容>。如果当前 _Myres
值小于或等于内部缓冲区大小,则数据 [应该] 存储在内部缓冲区中。否则,它存储在外部存储 block 中。看看这个不变量是否真的成立。如果没有,那就是你的问题。然后你只需要找到它坏掉的地方。
关于c++ - Visual Studio 调试监视中的不同_fileName 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27287424/
我是一名优秀的程序员,十分优秀!