【问题标题】:Vector has undefined value even though the values have been explicitley defined向量具有未定义的值,即使这些值已被明确定义
【发布时间】:2014-03-12 01:39:22
【问题描述】:

所以我的代码中有一个测试元素向量 (teste),因此我可以检查我的一个函数中元素的添加和删除。定义如下:

std::vector<GLuint> teste = {
        0, 1, 2,
        4, 3, 5
};

稍后我有一个函数打印这个和我的函数生成的元素向量

for(size_t i = 0; i < TestBuffer.Elements.size(); ++i){
    std::cout << "!" << i << std::endl;
    std::cout << TestBuffer.Elements[i] << std::endl;
    std::cout << teste[i] << std::endl;
}

它产生以下输出

!0
0
0
!1
1
1
!2
2
2
!3
4
4
!4
3
4294967293
!5
5
4

这到底是怎么回事? NOTHING 在定义 teste 后对其进行编辑。 teste[4] 的值也不会改变(注意:我不认为该值是 GLuint 的最大值,因为 GLuint -1 的值为 244294967295)。

编辑: 我不会包含所有代码,因为它超过 1000 行,没有人愿意阅读。 Here 是编辑 TestBufferBufferData)的函数,here 是声明和使用 teste 的地方。

这也是使用 OpenGL,因此 GLuint 是 OpenGL 无符号整数。

【问题讨论】:

  • 代码中存在问题,您没有显示。发布一个给出问题的完整程序。
  • @MattMcNabb 我希望它有 7 个文件,其中大部分与这部分代码无关(这是我尝试 3d 模型渲染器的一部分)
  • 注释掉部分代码,直到它停止发生...可能会提供线索
  • 你能在valgrind下运行吗?如果它检测到内存错误,那很可能就是原因。
  • @C.R.我以前从未听说过 valgrind,感谢您向我介绍它

标签: c++ vector cout


【解决方案1】:

这些行似乎有问题:

//Update the value of the vertices
for(uint i = VerticesEnd; i < Vertices.size(); ++i){
  VerticesPositions[i] -= ID.VerticesSize;
}

BufferData::RemoveData。通过查看其余代码,我大胆猜测它应该是:

//Update the value of the vertices
for(uint i = VerticesEnd; i < VerticesPositions.size(); ++i){
  VerticesPositions[i] -= ID.VerticesSize;
}

【讨论】:

  • 好像就是这样!谢谢!
【解决方案2】:

您应该发布更多代码,您的 GlueInt 是什么?什么是Testbuffer.Elements?

如果我这样做,它会像它应该的那样工作:

#include <iostream>
#include <vector>

using namespace std;
int main()
{
    std::vector<int> teste = {
        0, 1, 2,
        4, 3, 5
    };
    for (size_t i = 0; i < teste.size(); ++i){
        std::cout << "!" << i << std::endl;
        std::cout << teste[i] << std::endl;
        cin.get();
    }
    return 0;
}

因此它必须与您未发布的其余代码有关,因此如果您想要答案,请发布更多代码。

【讨论】:

    【解决方案3】:

    您看到未定义的行为,这可能是由于程序的其他部分访问超出其定义边界的数组或向量造成的。如果不查看更多代码,就不可能进行诊断。鉴于发布您的代码是不切实际的,您只能自己找到它。

    在 Microsoft 的 Visual Studio 中,您可以在修改特定内存地址时设置断点。我发现这在追踪此类问题时非常有用。

    【讨论】:

      猜你喜欢
      • 2017-02-17
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 2015-08-05
      • 2014-10-19
      • 1970-01-01
      • 2020-03-18
      相关资源
      最近更新 更多