Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Access violation executing location 0x0

Ostatnio zmodyfikowano 2015-09-25 19:03
Autor Wiadomość
pw1602
Temat założony przez niniejszego użytkownika
[SFML] Access violation executing location 0x0
» 2015-09-25 17:30:45
Jeśli jest to zły dział to proszę o przeniesienie.

Piszę grę w SFML i wszystko działało normalnie, po czym wyłączyłem Visuala i po pewnym czasie znowu go uruchomiłem i zmieniłem rzeczy do wyświetlenia w oknie po czym chciałem sprawdzić, jak to wszystko działa i za każdym razem wyskakuje mi taki komunikat:

Unhandled exception at 0x0000000000000000 in Western.exe: 0xC0000005: Access violation executing location 0x0000000000000000.

Przywrócenie poprzednich linii również nic nie daje. Szukałem rozwiązania, ale co z tego, jak każdy ma oddzielny błąd w kodzie, a ja mam wszystko takie samo, jak w poprzednim momencie kiedy gra działała normalnie. Jest ktoś w stanie pomóc?

Jeśli coś pomoże to dodane log:
'Western.exe' (Win32): Loaded 'C:\Users\Admin\Documents\Visual Studio 2013\Projects\Western\x64\Debug\Western.exe'. Symbols loaded.
'Western.exe' (Win32): Loaded 'C:\Windows\System32\ntdll.dll'. Cannot find or open the PDB file.
'Western.exe' (Win32): Loaded 'C:\Windows\System32\kernel32.dll'. Cannot find or open the PDB file.
'Western.exe' (Win32): Loaded 'C:\Windows\System32\KernelBase.dll'. Cannot find or open the PDB file.
First-chance exception at 0x0000000000000000 in Western.exe: 0xC0000005: Access violation executing location 0x0000000000000000.
Unhandled exception at 0x0000000000000000 in Western.exe: 0xC0000005: Access violation executing location 0x0000000000000000.

First-chance exception at 0x0000000000000000 in Western.exe: 0xC0000005: Access violation executing location 0x0000000000000000.
Unhandled exception at 0x0000000000000000 in Western.exe: 0xC0000005: Access violation executing location 0x0000000000000000.

The program '[1688] Western.exe' has exited with code 0 (0x0).
P-137925
pekfos
» 2015-09-25 18:14:05
Bez kodu nic się nie poradzi.

Jeśli jest to zły dział to proszę o przeniesienie.
Tytuł jest zły.
P-137928
pw1602
Temat założony przez niniejszego użytkownika
» 2015-09-25 18:34:38
Myślę, że tytuł teraz będzie dobry.

Ten kod:
C/C++
Text imie( postac.Imie(), czcionka, 10 );

RectangleShape pasek_hp( Vector2f( 100, 10 ) ), pasek_hp_color( Vector2f( postac.Sprawdz( "zycie" ), 10 ) );
pasek_hp.setFillColor( Color::Transparent );
pasek_hp.setOutlineColor( Color::Green );
pasek_hp.setOutlineThickness( 1 );
pasek_hp.setPosition( 10, 20 );
pasek_hp_color.setFillColor( Color::Red );
pasek_hp_color.setPosition( 10, 20 );

imie.setPosition( pasek_hp.getGlobalBounds().width / 2 - imie.getGlobalBounds().width / 2 + 10, 2 );
imie.setColor( Color::Black );

window->draw( imie );
window->draw( pasek_hp );
window->draw( pasek_hp_color );

został zamieniony na ten:
C/C++
hud.setPosition( 10, window->getSize().y - hud.getGlobalBounds().height - 10 );
zycie_pasek.setPosition( hud.getGlobalBounds().width - 1, window->getSize().y - 11 );

window->draw( hud );
window->draw( zycie_pasek );

W konstruktorze:
C/C++
if( !hud_tekstura.loadFromFile( "data\\fonts\\Gracz_HUD.png" ) )
     MessageBox( NULL, "Brak pliku Gracz_HUD.png!", "BLAD", NULL );

if( !zycie_pasek_tekstura.loadFromFile( "data\\fonts\\Gracz_zycie.png" ) )
     MessageBox( NULL, "Brak pliku Gracz_zycie.png!", "BLAD", NULL );

hud.setTexture( hud_tekstura );
zycie_pasek.setTexture( zycie_pasek_tekstura );

W pliku nagłówkowym:
C/C++
Texture zycie_pasek_tekstura, hud_tekstura;
Sprite zycie_pasek, hud;
P-137930
pekfos
» 2015-09-25 18:36:57
Myślę, że tytuł teraz będzie dobry.
Tylko 0 było dobre.

Ten kod: [..] został zamieniony na ten:
Znowu, masz talent do podawania bezużytecznych informacji. Przecież sam napisałeś, że przywrócenie poprzedniego stanu nic nie dało. Podaj cały kod.
P-137931
pw1602
Temat założony przez niniejszego użytkownika
» 2015-09-25 18:42:59
main.cpp
C/C++
#include "Gra.h"

int main()
{
    Gra gra;
    gra.Menu_Gry();
   
    return EXIT_SUCCESS;
}

Gra.h
C/C++
#include <SFML\Graphics.hpp>
#include <Windows.h>
#include <string>
#include "Silnik.h"

using namespace std;
using namespace sf;

class Gra
{
public:
    Gra();
    ~Gra();
   
    void Menu_Gry();
   
private:
    Font czcionka;
   
    enum StanGry { MENU, GRA, KONIEC };
    StanGry stangry;
   
    void menu();
    void gra();
   
    RenderWindow okno;
};

Gra.cpp
C/C++
#include "Gra.h"

Gra::Gra()
{
    stangry = KONIEC;
   
    if( !czcionka.loadFromFile( "data\\fonts\\arial.ttf" ) )
         MessageBox( NULL, "Brak pliku airal.ttf!", "BLAD", NULL );
   
    okno.create( VideoMode( 1024, 728, 32 ), "Western" );
    okno.setFramerateLimit( 60 );
   
    stangry = MENU;
}

Gra::~Gra()
{
    //destruktor
}

void Gra::Menu_Gry()
{
    while( stangry != KONIEC )
    {
        switch( stangry )
        {
        case StanGry::MENU:
            menu();
            break;
        case StanGry::GRA:
            gra();
            break;
        } //switch
    } //while
}

void Gra::gra()
{
    Silnik silnik( okno );
    silnik.silnik();
   
    stangry = MENU;
}

void Gra::menu()
{
    const int ile = 4; //Ilość wyborów w menu
    Text tytul( "Western", czcionka, 40 ), wybory_menu[ ile ];
    tytul.setPosition( okno.getSize().x / 2 - tytul.getGlobalBounds().width / 2, 25 );
    string str[] = { "Wyjdz", "Opcje", "Wczytaj", "Graj" }; //W odwrotnej kolejności, bo menu pozycjonuje się w oknie od dołu
   
    for( int i = 0; i < ile; i++ )
    {
        wybory_menu[ i ].setFont( czcionka );
        wybory_menu[ i ].setCharacterSize( 20 );
        wybory_menu[ i ].setString( str[ i ] );
        wybory_menu[ i ].setPosition( 25, okno.getSize().y - 25 - wybory_menu[ i ].getGlobalBounds().height - i * 25 );
    } //for
   
    while( stangry == MENU )
    {
        Event wydarzenie;
        Vector2f mysz( Mouse::getPosition( okno ) );
       
        if( okno.pollEvent( wydarzenie ) )
        {
            if( wydarzenie.type == Event::KeyReleased && wydarzenie.key.code == Keyboard::Escape ||
            wydarzenie.type == Event::Closed ||
            wybory_menu[ 0 ].getGlobalBounds().contains( mysz ) && wydarzenie.type == Event::MouseButtonReleased && wydarzenie.key.code == Mouse::Left )
                 stangry = KONIEC;
           
            if( wybory_menu[ 3 ].getGlobalBounds().contains( mysz ) && wydarzenie.type == Event::MouseButtonReleased && wydarzenie.key.code == Mouse::Left )
                 stangry = GRA; //Zmienić numer jeśli się coś dopisuje do menu!
           
        } //if
       
        for( int i = 0; i < ile; i++ )
        if( wybory_menu[ i ].getGlobalBounds().contains( mysz ) )
        {
            wybory_menu[ i ].setColor( Color::Red );
            wybory_menu[ i ].setPosition( 30, wybory_menu[ i ].getPosition().y );
        }
        else
        {
            wybory_menu[ i ].setColor( Color::White );
            wybory_menu[ i ].setPosition( 25, wybory_menu[ i ].getPosition().y );
        }
       
        okno.clear();
        okno.draw( tytul );
        for( int i = 0; i < ile; i++ )
             okno.draw( wybory_menu[ i ] );
       
        okno.display();
    } //while
}

Silnik.h
C/C++
#include <SFML\Graphics.hpp>
#include <Windows.h>
#include "Postac.h"

using namespace sf;
using namespace std;

class Silnik
{
public:
    Silnik( RenderWindow & win );
    ~Silnik();
   
    void silnik();
   
private:
    RenderWindow * window;
   
    Font czcionka;
    String tekst = ""; //Wpisywana nazwa postaci
    Text nazwa; //Wyświetlenie wpisywanej nazwy postaci
   
    enum StanSilnika { GRA, TWORZENIE, KONIEC };
    StanSilnika stansilnika;
   
    void Stworz_Postac(); //Ekran tworzenia postaci
    void Uruchom_Silnik(); //Cała gra
    void Tworzenie_Mapy(); //Ładowanie mapy
    void Pauza();
    void Rysuj();
    void HUD();
   
    Postac postac;
};

Silnik.cpp
C/C++
#include "Silnik.h"

Silnik::Silnik( RenderWindow & win )
{
    stansilnika = KONIEC;
   
    window = & win;
   
    if( !czcionka.loadFromFile( "data\\fonts\\arial.ttf" ) )
         MessageBox( NULL, "Brak pliku airal.ttf!", "BLAD", NULL );
   
    stansilnika = TWORZENIE;
}

Silnik::~Silnik()
{
    //destruktor
}

void Silnik::silnik()
{
    while( stansilnika != KONIEC )
    {
        switch( stansilnika )
        {
        case StanSilnika::GRA:
            Uruchom_Silnik();
            break;
        case StanSilnika::TWORZENIE:
            Stworz_Postac();
        } //switch
    } //while
}

void Silnik::Stworz_Postac()
{
    while( stansilnika == TWORZENIE )
    {
        Text wpisz( L"Wpisz nazwę swojej postaci:", czcionka, 30 );
        wpisz.setPosition( window->getSize().x / 2 - wpisz.getGlobalBounds().width / 2, 100 );
        Event event;
       
        if( window->pollEvent( event ) )
        {
            if( event.type == Event::TextEntered )
            {
                Uint32 unicode = event.text.unicode;
                if( unicode == '\b' && tekst.isEmpty() == false ) //Wciśnięcie Backspace usuwa litere
                     tekst.erase( tekst.getSize() - 1, 1 );
                else if((( unicode >= 48 && unicode <= 57 ) ||( unicode >= 65 && unicode <= 90 ) ||( unicode >= 97 && unicode <= 122 ) ) && //Ograniczenie znaków
                unicode != 8 && tekst.getSize() < 10 ) //+ różne od Enter + max 10 znaków
                     tekst += static_cast < char >( unicode );
               
                nazwa.setString( tekst );
            } //if
           
            if( event.type == Event::KeyPressed && event.key.code == Keyboard::Return )
            {
                stansilnika = GRA;
                postac.Nadaj_Imie( tekst );
            } //if
           
            if( event.type == Event::KeyReleased && event.key.code == Keyboard::Escape ||
            event.type == Event::Closed )
                 stansilnika = KONIEC;
           
        }
       
        nazwa.setColor( Color::White );
        nazwa.setFont( czcionka );
        nazwa.setCharacterSize( 20 );
        nazwa.setPosition( window->getSize().x / 2 - nazwa.getGlobalBounds().width / 2, wpisz.getPosition().y + wpisz.getGlobalBounds().height + 10 );
       
        window->clear();
        window->draw( wpisz );
        window->draw( nazwa );
        window->display();
    }
}

void Silnik::HUD()
{
    Text imie( postac.Imie(), czcionka, 10 );
    RectangleShape pasek_hp( Vector2f( 100, 10 ) ), pasek_hp_color( Vector2f( postac.Sprawdz( "zycie" ), 10 ) );
    pasek_hp.setFillColor( Color::Transparent );
    pasek_hp.setOutlineColor( Color::Green );
    pasek_hp.setOutlineThickness( 1 );
    pasek_hp.setPosition( 10, 20 );
    pasek_hp_color.setFillColor( Color::Red );
    pasek_hp_color.setPosition( 10, 20 );
    imie.setPosition( pasek_hp.getGlobalBounds().width / 2 - imie.getGlobalBounds().width / 2 + 10, 2 );
    imie.setColor( Color::Black );
   
    window->draw( imie );
    window->draw( pasek_hp );
    window->draw( pasek_hp_color );
}

void Silnik::Uruchom_Silnik()
{
    while( stansilnika == GRA )
    {
        Event wydarzenie;
        Vector2f mysz( Mouse::getPosition( * window ) );
       
        if( window->pollEvent( wydarzenie ) )
        {
            if( wydarzenie.type == Event::KeyReleased && wydarzenie.key.code == Keyboard::Escape ||
            wydarzenie.type == Event::Closed )
                 stansilnika = KONIEC;
           
            if( wydarzenie.type == Event::KeyPressed && wydarzenie.key.code == Keyboard::W )
                 postac.Ruch( 0, - 5 );
           
            if( wydarzenie.type == Event::KeyPressed && wydarzenie.key.code == Keyboard::S )
                 postac.Ruch( 0, 5 );
           
            if( wydarzenie.type == Event::KeyPressed && wydarzenie.key.code == Keyboard::A )
                 postac.Ruch( - 5, 0 );
           
            if( wydarzenie.type == Event::KeyPressed && wydarzenie.key.code == Keyboard::D )
                 postac.Ruch( 5, 0 );
           
        } //if
       
        window->clear( Color::White );
        window->draw( postac );
        HUD();
        window->display();
    } //while
}

Postac.h
C/C++
#include <SFML\Graphics.hpp>
#include <Windows.h>

using namespace sf;
using namespace std;

class Postac
    : public Drawable
{
public:
    Postac();
    ~Postac();
   
    void Nadaj_Imie( string im );
    void Ruch( int x, int y );
    int Sprawdz( string slowo ); //Zwraca liczbe np. zycia
    string Imie(); //Zwraca imie
   
private:
    int zycie, zrecznosc, sila, wytrzymalosc, szczescie, inteligencja, sprawnosc;
    string imie;
   
    Sprite sprajt, cien;
    Texture postac_tekstura, cien_tekstura;
   
    enum Ekwipunek { PRAWA_REKA, LEWA_REKA, GLOWA, TORS, NOGI, STOPY };
   
    void draw( RenderTarget & target, RenderStates states ) const;
};

Postac.cpp
C/C++
#include "Postac.h"

Postac::Postac()
{
    if( !postac_tekstura.loadFromFile( "data\\imgs\\Gracz.png" ) )
         MessageBox( NULL, "Brak pliku Gracz.png!", "BLAD", NULL );
   
    if( !cien_tekstura.loadFromFile( "data\\imgs\\Cien.png" ) )
         MessageBox( NULL, "Brak pliku Cien.png!", "BLAD", NULL );
   
    sprajt.setTexture( postac_tekstura );
    sprajt.setOrigin( 32, 48 );
    sprajt.setTextureRect( IntRect( 0, 0, 64, 96 ) );
    sprajt.setPosition( 100, 100 );
    cien.setTexture( cien_tekstura );
    cien.setPosition( sprajt.getPosition().x - 32, sprajt.getPosition().y - 48 );
   
    zycie = 100;
    zrecznosc = 1;
    sila = 1;
    wytrzymalosc = 1;
    szczescie = 1;
    inteligencja = 1;
    sprawnosc = 1;
   
    imie = "";
}

Postac::~Postac()
{
    //destruktor
}

void Postac::Ruch( int x, int y )
{
    sprajt.move( x, y );
    cien.move( x, y );
}

void Postac::Nadaj_Imie( string _imie )
{
    imie = _imie;
}

string Postac::Imie()
{
    return imie;
}

int Postac::Sprawdz( string slowo )
{
    if( slowo == "zycie" )
         return zycie;
   
    else if( slowo == "zrecznosc" )
         return zrecznosc;
   
    else if( slowo == "sila" )
         return sila;
   
    else if( slowo == "wytrzymalosc" )
         return wytrzymalosc;
   
    else if( slowo == "szczescie" )
         return szczescie;
   
    else if( slowo == "inteligencja" )
         return inteligencja;
   
    else if( slowo == "sprawnosc" )
         return sprawnosc;
    else return 0;
   
}

void Postac::draw( RenderTarget & target, RenderStates states ) const
{
    target.draw( cien );
    target.draw( sprajt );
}
P-137932
pekfos
» 2015-09-25 18:55:38
Co robisz, by wywołać błąd?
P-137933
pw1602
Temat założony przez niniejszego użytkownika
» 2015-09-25 18:57:32
Nic. Po prostu wciskam F5 i czekam, aż się skompiluje po czym wszystko przechodzi do uruchomienia gry i zamiast okna pojawia się ten błąd.
P-137934
pekfos
» 2015-09-25 18:59:17
Spróbuj zrobić Rebuild Solution.
P-137935
« 1 » 2
  Strona 1 z 2 Następna strona