Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MisterAlmanya

Frischling

  • »MisterAlmanya« ist der Autor dieses Themas

Beiträge: 18

Beruf: Schüler

  • Private Nachricht senden

1

06.07.2014, 21:23

SFML Zugriffsverletzung bei Setzen der Textur

Hallo,

mir wird jedesmal folgender Fehler angezeigt (welcher das Programm zum abstürzen bringt), wenn ich die Textur eines Sprites setzen will:

Quellcode

1
Unbehandelte Ausnahme bei 0x5B1B1ED6 (sfml-graphics-d-2.dll): 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x000000FC

die Textur wird hier gesetzt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
void WallOne::initWall1(const sf::Texture& w1_txWall1, const sf::Texture& w1_txWall3)
{
    v_mParts[0]->setTexture(w1_txWall1);
    v_mParts[1]->setTexture(w1_txWall1);
    v_mParts[2]->setTexture(w1_txWall1);
    v_mParts[3]->setTexture(w1_txWall3);
    v_mParts[4]->setTexture(w1_txWall1);
    v_mParts[5]->setTexture(w1_txWall1);
    v_mParts[6]->setTexture(w1_txWall3);
    v_mParts[7]->setTexture(w1_txWall1);
...
}

Die Methode wird in einer anderen Klasse aufgerufen:

C-/C++-Quelltext

1
2
3
4
5
6
void Wall::setWallTextures(const sf::Texture& txWall1, 
                           const sf::Texture& txWall2, 
                           const sf::Texture& txWall3)
{
    mWallOne.initWall1(txWall1, txWall3);
}

Ich nutze Visual Studio 2012 Express mit SFML 2.1 auf einem 64-Bit-System. Ich habe die entsprechenden Dateien für die SFML noch einmal heruntergeladen und ausprobiert, der Fehler erscheint aber immer noch. Auch bin ich mir sicher, dass ich die SFML richtig gelinkt habe. Selbst Google brachte da nichts.
Edit: Das passiert seltsamerweise nur, wenn ich Sprites aus einer anderen Klasse nehme, klassenintern bereitet es keine Probleme.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MisterAlmanya« (06.07.2014, 21:34)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

06.07.2014, 21:52

Ich rate mal in's Blaue hinein und behaupte, du rufst "someWallInstance.setWallTextures" auf, obwobl "someWallInstance"==null ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

MisterAlmanya

Frischling

  • »MisterAlmanya« ist der Autor dieses Themas

Beiträge: 18

Beruf: Schüler

  • Private Nachricht senden

3

06.07.2014, 22:03

Wenn ich dich richtig verstanden habe, ist dies nicht der Fall. Die Instanz von Wall ist Member einer anderen Klasse. Die Funktion wird im Konstruktor der Klasse aufgerufen.

Genauer:

C-/C++-Quelltext

1
2
3
4
5
6
7
InGame::InGame()
: mWall()
{
...
    mWall.setWallTextures(mTextures.get(Textures::Wall1), mTextures.get(Textures::Wall1), mTextures.get(Textures::Wall1));
...
}


Auch die Texturen werden zuvor definiert.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

06.07.2014, 22:21

Dann wirst Du wohl mit dem Debugger durchsteppen müssen. Irgendwas zeigt jedenfalls auf eine ungültige Adresse (null+0xFC Offset).
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

MisterAlmanya

Frischling

  • »MisterAlmanya« ist der Autor dieses Themas

Beiträge: 18

Beruf: Schüler

  • Private Nachricht senden

5

06.07.2014, 23:23

Nach einem mühsamen Durchlauf im Einzelschritt mit dem Debugger habe ich den Fehler gefunden! Die Sprites, auf die ich zugreifen wollte, waren nicht definiert. Dachte eigentlich, dass der Standard-Konstruktor automatisch aufgerufen werden würde, das musste aber manuell gemacht werden. Danke für die Hilfe.

Werbeanzeige