即使已经明确定义了值,Vector也有未定义的值

时间:2014-03-12 01:39:23

标签: c++ vector cout

所以我的代码中有一个测试元素(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 编辑testeteste[4]的值也不会改变(注意:我认为该值不是GLuint的最大值,因为GLuint -1的值为244294967295

编辑: 我不打算包含所有代码,因为它超过1000行,没有人想读它。 Here是编辑TestBuffer(一个BufferData)和here的函数,其中teste被声明和使用。

这也是使用OpenGL,因此GLuint是一个OpenGL unsigned int。

3 个答案:

答案 0 :(得分:0)

你应该发布更多代码,你的 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;
}

因此,您必须使用其他未发布的代码,因此如果您想要一个答案,请发布更多代码。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

线条似乎有问题:

//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;
}