C++ 为什么这种阵列选择会导致这样的故障现象?

C++ 为什么这种阵列选择会导致这样的故障现象?,c++,arrays,opengl,C++,Arrays,Opengl,我正在用Glaux库在openGl中加载一幅图像时,遇到了一个非常奇怪的数组现象。下面是我尝试过的一些例子,以及它们是否成功。curFreeId变量是全局变量。我创建用于测试的额外变量是函数的局部变量 从什么时候开始,这会影响代码流 unsigned int curFreeId = 0; modStruct->t[ i ].gluId = curFreeId; glGenTextures(1, &glTextureList[curFreeId]);

我正在用Glaux库在openGl中加载一幅图像时,遇到了一个非常奇怪的数组现象。下面是我尝试过的一些例子,以及它们是否成功。curFreeId变量是全局变量。我创建用于测试的额外变量是函数的局部变量

从什么时候开始,这会影响代码流

    unsigned int curFreeId = 0;
    modStruct->t[ i ].gluId = curFreeId;
    glGenTextures(1, &glTextureList[curFreeId]);
    glBindTexture(GL_TEXTURE_2D, glTextureList[curFreeId]);
vs

第一个代码不起作用。第二份遗嘱。有人知道为什么会这样吗

编辑:奇怪的是,这也能正常工作

unsigned int curFreeId = 0;
modStruct->t[ i ].gluId = curFreeId;
glGenTextures(1, &glTextureList[0]);
glBindTexture(GL_TEXTURE_2D, glTextureList[curFreeId]);
这也一样

unsigned int curFreeId = 0;
modStruct->t[ i ].gluId = curFreeId;
glGenTextures(1, &glTextureList[curFreeId]);
glBindTexture(GL_TEXTURE_2D, glTextureList[0]);
继续进行一些测试。我遇到了更奇怪的结果

这很有效

    unsigned int curFreeId = 0;
    unsigned int curid = 0;
    modStruct->t[ i ].gluId = curFreeId;
    glGenTextures(1, &glTextureList[curid]);
    glBindTexture(GL_TEXTURE_2D, glTextureList[curFreeId]);
但这不

    unsigned int curFreeId = 0;
    unsigned int curid = curFreeId;
    modStruct->t[ i ].gluId = curFreeId;
    glGenTextures(1, &glTextureList[curid]);
    glBindTexture(GL_TEXTURE_2D, glTextureList[curFreeId]);
但这确实

    unsigned int curFreeId = 0;
    unsigned int curid = curFreeId = 0;
    modStruct->t[ i ].gluId = curFreeId;
    glGenTextures(1, &glTextureList[curid]);
    glBindTexture(GL_TEXTURE_2D, glTextureList[curFreeId]);

世界是什么。。。这是某种小故障吗?

好的。。。我只是浏览了整个项目,寻找与curFreeId的所有关系。我设法在某处找到了一个随机加法符号

curFreeId++;
我讨厌那些简单的虫子


谢谢你们的帮助。由于您的建议,我设法修复了一些其他错误。

发布您的全部代码。您的应用程序是多线程的吗?在多次运行同一代码时,是否会得到不一致的结果?使用哪种编译器?有/没有优化?是否可以单步执行生成的汇编代码?很可能您在某个地方重写了一些未分配的内存,但如果没有更多的代码,则很难找出问题所在。这是用于以我创建的三维模型格式加载的类方法。我尝试将嵌入模型中的纹理与路径结合起来。如果找到路径,它会将其加载到opengl中,并为其创建mipmap,然后为其分配id。代码相当大,因此我将只上载一个包含该路径的Rar文件。您可以在此处找到项目文件:很抱歉链接到我的站点,但由于它也是一个编程论坛,因此似乎最容易在此处上载该文件。那里的任何人都可以帮助我。@Adam没有多线程,我得到的结果与应用程序一致@jdv Microsoft Visual Studio 2008。具有不,我对asm不够好,无法用这种方式调试它@5.这似乎不太可能。在代码的这一部分中没有可分配或未分配的内容。即使有,这也可以解释为什么在静态变量中传递0对0常量有不同的影响。
curFreeId++;