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

1

03.01.2008, 12:53

Enum Resolutions

Hmm mich regt hier ein Stück code auf. Es soll eigtl. nur für ein Konfigurationsprogramm bestimmte Auflösungen auflisten. Doch aus einem mir noch unergründlichen Grund bekomm ich Exceptions um den Kopf geworfen.
Hab auch schon den Speicher checken lassen und alles :(

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Direct3D::get_supported_resolution(std::vector< std::wstring > & data, resolution_t const& min)
{
    assert(_CrtCheckMemory());
    data.clear();
    D3DDISPLAYMODE mode;
    const std::size_t count(m_lpDirect3D->GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8));

    for (std::size_t i(0); i < count; ++i)
    {
        if (FAILED(m_lpDirect3D->EnumAdapterModes(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, static_cast<UINT>(i), &mode))) 
            continue;
        if (mode.Width >= min.first && mode.Height >= min.second)
        {
            std::wostringstream ss;
            ss << std::setw(4) << std::setfill(L'0') << mode.Width << L" * " << std::setw(4) << std::setfill(L'0') << mode.Height;
            data.push_back(ss.str());
        }
    }
    std::unique(data.begin(), data.end());
    assert(_CrtCheckMemory());
}
Da kommt er auch durch. Geht mitlerweile alles in Ordnung. (eigtl. kommt das umformen der Werte in einen String außerhalb der Funktion, aber aus Testzwecken ist es da jetzt kurz mit drin. (normal wird der Vector vom type resoulution_t sein [typedef von std::pair])

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void WindowMain::enum_resolutions()
{
    try 
    {
        std::vector<std::wstring> resolutions;
        xyz.get_supported_resolution(resolutions);
        
        for (std::size_t i(0); i < resolutions.size(); ++i)
            m_wndComboResolution.add_item(resolutions.at(i));
    } catch(std::exception& ex)
    {
        MessageBoxA(NULL, ex.what(), 0, 0);
    }
}
... nach der Schleife haut er mir es um die Ohren (im Destruktor von resolutions). Hat da Jemand eine Idee? :)

Vlg Deviloper

PS sorry für den schlechten Stil ... es ist nur Testweise und nicht die endgültige Version, da ja noch Fehler drin sind und ich d.h. jegliche optimierung usw. weggelassen habe.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

03.01.2008, 13:33

Versuch doch statt dem durchzählen das Ganze mit Iteratoren. Vielleicht hilft es. Ansonsten wäre es gut zu wissen was für eine exception geworfen wird.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

3

03.01.2008, 14:01

Hmm angeblich fliegt er beim

C-/C++-Quelltext

1
2
3
4
void deallocate(pointer _Ptr, size_type)
        {   // deallocate object at _Ptr, ignore size

        ::operator delete(_Ptr);
        }
des 1. Items des Vectors raus. D.h. er bekommt es nicht hin den Vector wieder ordentlich frei zu geben.

Welcher Typ ... noch keine Ahnung?!
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

03.01.2008, 14:32

Dann kommentier mal den try/catch-Block aus. Dann wird dir der Debugger schon sagen was los ist ;) . Aber in dem Vector/Strings stehen vernünftige Werte?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

5

03.01.2008, 14:44

Hmm hab ich auskommentiert. Da ändert sich nichts. Ok vllt sollte ich fairer Weise sagen, dass er sagt er "Triggered a breakpoint" und selbst wenn ich catch(...) nehmen würde, er mir nichts abfängt sondern vorher rausfliegt ;)

Zitat

HEAP[xyz.exe]: Invalid Address specified to RtlValidateHeap( 00F20000, 00E98648 )
Windows has triggered a breakpoint in xyz.exe.
Vorher sollte aber noch nicht auf den Heap von meiner Seite aus zugegriffen worden sein ... also außer das natürlich std::vector, std::string usw. darauf zugreifen ...

edit: ja es stehen die richtigen Werte drin ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

03.01.2008, 15:07

Und schonmal mit den Iteratoren versucht? Weil irgendwoher muss es ja kommen :lol:
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

7

03.01.2008, 15:34

Ja hab ich ;) Und das ändert nichts an der Situation :D Man ist das stressig ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

03.01.2008, 15:48

Gut. Dann scheint der Fehler ja in get_supported_resolution zu liegen. Ich würde das Teil testweise auskommentieren. Wenn der Fehler dann nicht auftritt, würde ich nach und nach die Teile der Methode wieder reinholen. Irgendwann findet man so den Fehler, weil so direkt sehe ich ihn auch nicht.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

9

03.01.2008, 17:09

Der Fehler tritt nur auf, wenn ich push_back aufrufe ... vorher kann ich die generierten Strings ohne weiters nutzen ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

10

03.01.2008, 23:07

Und es liegt nicht an den darauf folgenden Funktionen? Weil irgendwie ist das ziemlich seltsam.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige