使用GLFW调用时出现C ++错误

时间:2014-06-27 23:56:36

标签: c++ glfw

我最近一直在学习用c ++编程,但在使用GLEW和GLFW时我遇到了问题。

来源(.cpp):

#include<iostream>
#define GLEW_STATIC
#include "GLEW/glew.h"
#include <GLFW/glfw3.h>

int main(){
    std::cout<<"test";

    GLFWWindow* window;
    window = glfwCreateWindow(800,600,"Test", glfwGetPrimaryMonitor(),NULL);

    return 0;
}

这个程序编译没有错误,但是当它运行时,尽管std :: cout没有生成输出。但是,只要glfwCreateWindow调用被注释掉,程序就会显示它应该的输出。

我对此非常困惑,想知道我能做些什么来修复它。

编辑:我怀疑它是std :: cout的问题,因为当我尝试显示这样的窗口时,我仍然没有收到该程序的响应。

glfwShowWindow(window);
while(!glfwWindowShouldClose(window))glfwPollEvents();
glfwDestroyWindow(window);

编辑2: 这是我现在的代码:

#define GLEW_STATIC
#include "GLEW/glew.h"
#include <GLFW/glfw3.h>
#include <iostream>

int main(){
    std::cout<<"test" << std::endl;
    glfwInit();

    GLFWwindow* window;
    window = glfwCreateWindow(800,600,"TEST", NULL, NULL);

    glfwShowWindow(window);
    while(!glfwWindowShouldClose(window))glfwPollEvents();
    glfwDestroyWindow(window);
    glfwTerminate();
    std::cin.get();
}

编辑3:标题

编辑4:经过一些实验,我发现在源文件中提及glfw调用似乎阻止了程序的运行。以下内容不会生成输出:

int main(){
    std::cout<<"test" << std::endl;

    std::cout.flush();

    std::cin.get();
}
void test(){
    glfwInit();

    GLFWwindow* window;
    window = glfwCreateWindow(800,600,"TEST", NULL, NULL);

    glfwShowWindow(window);
    while(!glfwWindowShouldClose(window))glfwPollEvents();
    glfwDestroyWindow(window);
    glfwTerminate();

}

1 个答案:

答案 0 :(得分:1)

stdout上没有输出的一些原因:

  • 如果您在Windows上运行,则您的程序可能已在Windows子系统中编译。然后,任何到stdout的打印都将转到bitbucket。如果您使用MinGW工具链,则由-mwindows链接器标志
  • 控制
  • 如果程序崩溃,则可能无法写入缓冲输出。因此,在执行任何其他操作之前,请尝试刷新输出流。请注意,程序可能会无声地崩溃。

您可以要求了解更多信息:

  • 使用编译器附带的调试器逐步执行代码会发生什么?
  • 由于glfwCreateWindow隐藏了输出,因此它可能会在该函数内崩溃。你传递了正确的论点吗?
  • glfwCreateWindow会返回有效指针吗?