C++ 变量更改其值

C++ 变量更改其值,c++,class,opengl,C++,Class,Opengl,我对变量有一个非常奇怪的问题。在OPENGL渲染循环中进行几次调用后,一个变量会毫无原因地更改其值(verticesSize),而第二个变量(verticesSize2)则不会。。。 相反,当我在程序的任何其他位置循环它们(使用For)时,两者都保持正确的值。 无论我如何命名第一个变量,它总是改变它的值,所以它一定是内存问题,但我不知道是什么原因造成的。有什么想法吗 cpp。文件 void CosmicBody::InitShape(unsigned int uiStacks, unsigned

我对变量有一个非常奇怪的问题。在OPENGL渲染循环中进行几次调用后,一个变量会毫无原因地更改其值(
verticesSize
),而第二个变量(verticesSize2)则不会。。。 相反,当我在程序的任何其他位置循环它们(使用For)时,两者都保持正确的值。 无论我如何命名第一个变量,它总是改变它的值,所以它一定是内存问题,但我不知道是什么原因造成的。有什么想法吗

cpp。文件

void CosmicBody::InitShape(unsigned int uiStacks, unsigned int uiSlices, float    fA,       float fB, float fC)
{
float tStep = (Pi) / (float)uiSlices;
float sStep = (Pi) / (float)uiStacks;

float SlicesCount=(Pi+0.0001)/tStep;
float StackCount=(2*Pi+0.0001)/sStep;
this->verticesSize=((int) (SlicesCount+1) * (int) (StackCount+1))*2;
    this->verticesSize2=((int) (SlicesCount+1) * (int) (StackCount+1))*2;
}
main.cpp

#include ....
CosmicBody one;

void renderScene(void)
{

std::cout<<one.verticesSize<<endl;
std::cout<<one.verticesSize2<<endl;

fps.calculateFPS(clock.elapsedTime);

glutSwapBuffers();
}
}


fps
缓冲区不够大,无法容纳结果输出,导致未定义的行为:

sprintf(this->fps,"%f",fps);
我不确定默认精度,但在我的机器上:

float f = 1.1f;
产生:

1.100000
这是9个字符(7位数字、句点和空终止符)

您需要指定精度:

sprintf(this->fps, "%.2f", fps);

或这是C++使用的是<代码> STD::OSTRIGSTROUND和 STD::String < /Cord>。

std::string fps;

...

float fps = frameCount / (timeInterval / 1000.0f);
std::ostringstream s;
s << fps;
this->fps = s.str();
std::字符串fps;
...
浮点fps=帧数/(时间间隔/1000.0f);
std::ostringstream s;
s fps=s.str();

代码太多了。为什么要显示此部分,但省略了一些
…Opengl内容..
p1
定义?通常与指针相关的内存问题,但您没有显示任何。首先,使用空的
CosmicBody
构造函数是个坏主意,它应该初始化
verticesSize
verticesSize2
,否则它们可能包含垃圾。第二,使用单步调试来定位引起问题的行,这里的代码不足以检测到它。
sprintf(this->fps, "%.2f", fps);
std::string fps;

...

float fps = frameCount / (timeInterval / 1000.0f);
std::ostringstream s;
s << fps;
this->fps = s.str();