Повреждение кучи, но только при компиляции на ноутбуке

Я пытаюсь скомпилировать программу, которая отлично компилируется на моем настольном компьютере, но на моем ноутбуке она компилируется, но при каждом запуске выдает эту ошибку:

Windows сработала точка останова в RR.exe.

Это может быть связано с повреждением кучи, что указывает на ошибку в RR.exe или любую из загруженных библиотек DLL.

Это также может быть связано с тем, что пользователь нажимает клавишу F12, когда фокус находится в RR.exe.

Окно вывода может содержать дополнительную диагностическую информацию.

Я закомментировал строки, пока не нашел строку с ошибкой:

if(glfwOpenWindow(width_, height_, 0, 0, 0, 0, 32, 0, GLFW_WINDOW) != GL_TRUE) {
    throw std::runtime_error("Unable to open GLFW window");
}

Странно, если я заменю width_и height_константами, например 800 и 600 соответственно, он останавливает повреждение кучи. Кроме того, если я просто использую значения по умолчанию, установленные конструктором, вместо того, чтобы передавать значения, это не приведет к сбою.

Вот полный код. Эти строки находятся в конструкторе Window.

window.h

#pragma once

#include <iostream>
#include <GL\glew.h>
#include <GL\glfw.h>

#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glew32.lib")
#pragma comment(lib, "GLFW.lib")

class Window {
public:
    Window(unsigned width = 800, unsigned height = 600);
    ~Window();

    void clear();
    inline void display() { glfwSwapBuffers(); }
    inline bool exit() { return !glfwGetWindowParam(GLFW_OPENED); }

private:
    unsigned width_, height_;
};

window.cpp

#include "window.h"

Window::Window(unsigned width, unsigned height) : width_(width), height_(height) {
    if(glfwInit() != GL_TRUE) {
        throw std::runtime_error("Unable to initialize GLFW");
    }

    if(glfwOpenWindow(width_, height_, 0, 0, 0, 0, 32, 0, GLFW_WINDOW) != GL_TRUE) { //crash
    //if(glfwOpenWindow(800, 600, 0, 0, 0, 0, 32, 0, GLFW_WINDOW) != GL_TRUE) { //no crash
        throw std::runtime_error("Unable to open GLFW window");
    }

    GLenum result = glewInit();
    if(result != GLEW_OK) {
        std::stringstream ss;
        ss << "Unable to initialize glew: " << glewGetErrorString(result);
        throw std::runtime_error(ss.str());
    }
}

Window::~Window() {
    glfwTerminate();
}

void Window::clear() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
}

main.cpp

#include "window.h"

int main() {
    Window wind(1024, 800); //crash
    Window wind(800, 600); //crash
    Window wind(); //works

    return 0;
}
10
задан Oliver Charlesworth 19 March 2012 в 11:45
поделиться