2013-07-21 60 views
1

我想在Visual Studio 2012中運行這個簡單的SFML C++程序。它在調試模式下工作正常,但只要使用非調試庫和DLL,程序就會引發Access第一行代碼中存在違規異常。如果我刪除了賦值(以及賦值的依賴關係),並運行'sf :: VideoMode :: getFullscreenModes();'它工作正常。SFML只適用於調試模式

我有動態鏈接庫。

#include <SFML/System.hpp> 
#include <SFML/Window.hpp> 
#include <SFML/OpenGL.hpp> 
#include <iostream> 

int main(int argCount, char** argVector) { 
    std::vector<sf::VideoMode> vm = sf::VideoMode::getFullscreenModes(); // Access Violation in Non-Debug Mode 

    sf::VideoMode videoMode; 
    for(unsigned i = 0; i < vm.size(); i++) { 
     if(vm[i].isValid()) { 
      videoMode = vm[i]; 
      break; 
     } 
     std::cout << "Invalid VideoMode: " << i << std::endl; 
    } 
    sf::Window window(videoMode, "SFML OpenGL", sf::Style::Fullscreen); 
    glClearDepth(0.5F); 
    glOrtho(0, 1, 0, 1, 0, 1); 
    std::cout << glGetError(); 
    glColor3f(0, 1, 0); 
    { 
     glBegin(GL_QUADS); 
     glVertex3i(0, 0, 0); 
     glVertex3i(0, 1, 0); 
     glVertex3i(1, 1, 0); 
     glVertex3i(1, 0, 0); 
     glEnd(); 
    } 

    window.display(); 
    while(window.isOpen()) {} 
    return 0; 
} 

回答

3

簡答:您不能混用調試/發佈二進制文件。

報價爲Visual Studio官方SFML教程:

重要的是要鏈接到符合配置的庫: 「SFML-XXX-d.lib」 的調試,以及「SFML-XXX。 lib「發佈。糟糕的組合可能導致崩潰。

這是紅色的here

相關問題