首页 > 解决方案 > 访问/读取值时浮动损坏(Cout 打印)

问题描述

所以,我目前正在开发一个 OpenGL C++ 项目,在该项目中我尝试加载我自己制作的自定义格式,唯一的问题是单个 cout语句可能会破坏整个事情。


理解问题所需的所有代码都在这里:

    for (int i = vertpos; i<vertpos+vertsize; i++) {
        vertices[i] = stof(contents[i]);
    }

此代码将从文本文件(内容 = 文件信息)解析的字符串转换为顶点浮点数组(或 GLfloat,发生同样的事情)。

Vertpos 是顶点信息开始的位置(所以在标题之后),vertsize 是在移动到我的元素表之前信息的大小。一切都按预期工作,这是正在渲染的模型的图片


记住,该程序不完整,因此由于 RGB 值和 UV 值设置不正确(程序用于确定纹理放置和顶点着色的一些其他值),模型具有奇怪的形状: 损坏模型按预期工作的图片


现在,让我们尝试添加一个小打印功能,这样我就可以看到这些值:

    for (int i = vertpos; i<vertpos+vertsize; i++) {
        vertices[i] = stof(contents[i]);
        cout << vertices[i] << flush;
    }

使用 cout << vertices[i] << flush; 正常工作的损坏模型的图片 一切正常!. 虽然我想分隔所有内容,但让我们尝试添加一个冒号分隔符:

    for (int i = vertpos; i<vertpos+vertsize; i++) {
        vertices[i] = stof(contents[i]);
        cout << vertices[i] << ":separatorstring,anyseparatorgivesthesameresult::::" << flush;
    }

破碎的模特表演,嗯,破碎(不应该)


这似乎触发了随机间隔,当我写这个时,一旦我更改了代码,什么都没有发生,但是随后篡改了打印元素的代码(元素表之间的连接),它又发生了。

我很难在网上找到有相同体验的人,这很奇怪。它似乎只是,发生了。


图片(如 1 和 2)之间的任何不一致都是由于旋转模型造成的,我尝试在它旋转的确切时间拍摄图片,并查看它们相同的值。

标签: c++arraysopenglfloating-pointcorruption

解决方案


推荐阅读