变量改变其价值

时间:2012-08-22 19:09:04

标签: c++ class opengl

我对变量有一个非常奇怪的问题。在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();
}

修改 好的,我发现哪一行导致了问题 在这个函数函数sprintf使程序运行不正确。为什么另一个类的函数导致这个?      void FpsCalc :: calculateFPS(unsigned int currentTime)      {

frameCount++;
int timeInterval = currentTime - previousTime;

if(timeInterval > 1000)
{
    float fps = frameCount / (timeInterval / 1000.0f);
    previousTime = currentTime;
    frameCount = 0;
    sprintf(this->fps,"%f",fps); //this line makes mess 
}

}

#ifndef FPSCALC_H
#define FPSCALC_H
class FpsCalc
{
private:
int frameCount;
float previousTime;


public:
FpsCalc();
void calculateFPS(unsigned int currentTime);
char fps[5];

~FpsCalc(){};
};
#endif

1 个答案:

答案 0 :(得分:1)

fps缓冲区不足以容纳结果输出,导致未定义的行为:

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

我不确定默认精度,但在我的机器上:

float f = 1.1f;

产生

1.100000

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

您需要指定精度:

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

或者这是C ++,而是使用std::ostringstreamstd::string

std::string fps;

...

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