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

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 155

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

1

13.09.2014, 18:39

[C++] SmartPointer - Fehler

Hi,

ich arbeite noch nicht so lange mit SmartPointern, und hab ein Problem:

Hier erstmal der Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
std::unique_ptr<Engine> MyEngine;
std::shared_ptr<Game::GameInstance> GameInstance;

[...]

void init(HWND hwnd)
{
    MyEngine= std::unique_ptr<Engine>();
    GameInstance = MyEngine->CreateGameInstance();

    try
    {
        GameInstance->CreateDeviceContext(hwnd, (float)winWidth, (float)winHeight, false);
    }
    catch (STEngine::Exceptions::STException& e)
    {
        MessageBox(hwnd, (WCHAR*)e.GetError().c_str(), L"FEHLER",0);
    }
}


//Methode CreateGameInstance() der Engine

C-/C++-Quelltext

1
2
3
4
std::shared_ptr<Game::GameInstance> Engine::CreateGameInstance()
{
    return std::shared_ptr<Game::GameInstance>(new Game::GameInstance(this));
}


//GameInstance - Konstruktor

C-/C++-Quelltext

1
2
3
4
Game::GameInstance::GameInstance(Engine* engine)
{
    this->Engine = engine;
}


Wenn ich dieses Beispiel Compiliere, bekomme ich beim Starten in der Zeile

C-/C++-Quelltext

1
2
3
4
try
{
    GameInstance->CreateDeviceContext(hwnd, (float)winWidth, (float)winHeight, false);
}

eine Exception in der memory-Include Datei.
Genauer kann ich den Fehler nicht beschreiben.


Was mach ich hier falsch?


Gruß

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

2

13.09.2014, 18:59

Quellcode

1
MyEngine= new Engine{};

Du erzeugst dir bloß std::unique_ptr ohne Inhalt, versuchst also die ganze Zeit, nullptr zu dereferenzieren.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 155

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

3

14.09.2014, 15:45

Hi,

und wie mach ich es richtig?

Wenn ich ganz oben

C-/C++-Quelltext

1
std::unique_ptr<Engine> MyEngine = std::unique_ptr<Engine>(new Engine());


Schreibe, bekomme ich den gleichen Fehler....


Gruß

EDIT: Hat sich erledigt, der Fehler lag woanders ;)

Werbeanzeige