Vector具有未定义的值,即使这些值已被显式定义

Vector has undefined value even though the values have been explicitley defined

本文关键字:定义 未定义 Vector      更新时间:2023-10-16

所以我在代码中有一个测试元素(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

这到底是怎么回事?NOTHINGteste被定义后编辑它。此外,teste[4]的值不会改变(注意:我不认为该值是GLuint的最大值,因为GLuint -1的值为244294967295)。

编辑:我不打算包括所有的代码,因为它超过1000行,没有人想读。下面是编辑TestBuffer(一个BufferData)的函数,下面是声明和使用teste的地方。

这也是在使用OpenGL所以GLuint是OpenGL无符号整型

这几行似乎有问题:

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

in BufferData::RemoveData。通过查看其余的代码,我冒昧地猜测它应该是:

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

你应该张贴一些更多的代码,什么是你的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;
}

所以它必须与你没有发布的其他代码相匹配,所以如果你想要一个答案,请发布更多的代码

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

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