【问题标题】:Variable changes its value变量改变它的值
【发布时间】:2012-08-22 19:09:04
【问题描述】:

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

ma​​in.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

【问题讨论】:

  • 它的太多代码。为什么显示这部分,却省略了一些...Opengl stuff..p1 的定义?通常与指针有关的内存问题,但您没有显示任何问题。
  • 首先 - 有空的 CosmicBody 构造函数是个坏主意,它应该初始化 verticesSizeverticesSize2 因为否则它们可能包含垃圾。其次,使用单步调试来定位导致问题的行,你这里的代码是检测不到的。

标签: c++ class opengl


【解决方案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();

【讨论】:

    猜你喜欢
    • 2022-11-27
    • 2011-11-25
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2016-05-06
    • 2013-03-14
    • 1970-01-01
    相关资源
    最近更新 更多