【问题标题】:C++ segmentation fault chronoC++ 分段错误计时
【发布时间】:2018-07-15 12:26:21
【问题描述】:

我正在尝试为我的游戏项目创建一个小时钟。 我正在使用chrono-high-resolution-clock。 但是,在我的头文件“gameTime.hpp”中声明变量后,在我的源文件“gameTime.cpp”中引用它时,我得到一个段错误。 希望任何人都可以提供帮助(如果答案应该是微不足道的:对不起,但我对该主题所做的搜索对我没有帮助) 代码如下:

头文件:

class GameTime
{
private:
    std::chrono::high_resolution_clock::time_point mTime;
    std::chrono::high_resolution_clock::time_point mLastTime;
    double mTimeSpan;
public:
    GameTime();
    ~GameTime();
    void init();
    double timePassed();
};

源文件:

GameTime::GameTime()
{

}

void GameTime::init()
{
    mTime = std::chrono::high_resolution_clock::now();
    mLastTime = std::chrono::high_resolution_clock::now();
}

double GameTime::timePassed()
{
    mTime = std::chrono::high_resolution_clock::now();
    mTimeSpan = std::chrono::duration_cast<std::chrono::milliseconds>(mTime - mLastTime).count();
    mLastTime = std::chrono::high_resolution_clock::now();

    return mTimeSpan;  
}

和主要功能:(有人指出我应该包括这个)

double frameTime;
GameTime* gameTime;

gameTime->init();

while(game->running())
{
    frameTime = gameTime->timePassed();

    std::cout << frameTime << std::endl;
}

当我尝试为 mTime 设置值时,段错误发生在 init() 函数内部。 提前致谢!

【问题讨论】:

  • 您忘记发布调用这些函数的代码(很可能类实例无效)。
  • 感谢您的快速答复!我编辑了我的帖子,并在其中包含了我调用函数的主要功能的重要部分。我通过指针初始化 GameTime 的事实可能是导致错误的原因吗?问题是,如果我不通过指针初始化它,我会得到那些红线告诉我“表达式必须具有指针类型”
  • 您实际上并没有创建GameTime 的实例,gameTime 可能不需要是指针。只需放下指针,这应该可以解决您的问题。
  • @It'scominghome 好的,谢谢你们!好的,这是一个明显的错误,但我想我不会单独找到它。我现在将用你让我想出的解决方案来回答我的问题:)

标签: c++ segmentation-fault initialization declaration chrono


【解决方案1】:

好的,问题是在我的主函数中,我只创建了一个指针,而不是 GameTime 类的真实实例。 工作代码现在如下所示:

(main.cpp)

GameTime *gameTime = nullptr;

int main()
{
    gameTime = new GameTime();

    gameTime->init();

    while(game->running())
    {
        frameTime = gameTime->timePassed();

        std::cout << frameTime << std::endl;
    }

    return 0;
}

在我的课堂实现中,一切都很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多