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

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

11

07.06.2008, 12:24

Danke für die Kritik! So kann ich wenigstens besser machen, was Mist war.

Erstmal habe ich absichtlich kein reines C++ (mit Exceptions, etc.) benutzt, sondern auch noch ein bisschen C. Darum das Makro und die Rückgabewerte.

Zu2/ Ich habe mal alles noch etwas überarbeitet, ihr hattet Recht: Es sah wirklich lieblos aus. :oops:

Zu 3/ if(Pointer) ist weg. Aber das mit dem Makro find ich garnicht so verkehrt.

Zu 6/ Stimmt, ist schöner, aber ASCII-Arts haben auch was an sich ;)

Zu 1/ Tut mir leid! Ich hatte es so gelernt, dass "Destruktoren keinen Parameter übernehmen dürfen, nicht mal void". Dummes Buch!

Zu 4/ ist auch verbessert, ich hoffe so geht's jetzt

Zu 5/ Ja du hast Recht mit den Exceptions. Aber ich bin eigentlich immer gut mit meinem GTResult klargekommen. Und ich wollte das nicht noch komplizierter machen. Außerdem ist jedes meiner Projekte ohne Exceptions gelaufen.

Zu 7/ Das kommt noch aus den Anfängen. Ist aber korrigiert worden.

Das mit dem pragma habe ich auch korrigiert.


Ich hoffe jetzt gefällt es euch ein bisschen besser! Wenn noch Fehler zu finden sind, bitte sagt es.
Ich werde mir eure Tips für das nächste mal zu Herzen nehmen!

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

12

07.06.2008, 12:27

Re: Eine Queue selber bauen

Bei Delete kommt es mir so vor, als wenn sich ein Fehler eingeschlichen hat:

3) Delete:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
        else
            for(int i=0;i<m_iElementsCnt;i+=1)
            {
                m_pFirst->pNext=m_pFirst;  // <- hier

                // besser wäre glaub ich

                // m_pFirst = m_pFirst->pNext;


                GTSafeDelete(m_pFirst->pLast);
            }


// €dit:
Sehe grad, dass es hier noch komplizierter is, ich schau erstma genauer hin bevor ich weiter schreib ;)

// €dit 2:
Damit auch das letzte Element gelöscht wird darf das delete nicht auf ->pLast ausgeführt werden, denn es gibt ja ohne großen Aufwand kein Element, was m_pLast als Vorgänger hat :)

Vorschlag:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
// ...

else
    for (SElement* it=0; ;)
    {
        it = m_pFirst;
        m_pFirst = m_pFirst->pNext;

        delete it;

        if (it == m_pLast)
            break;
    }


kein SafeDelete, weil nach der 0 setzung kein Vergleich mehr klappt :)

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

13

07.06.2008, 15:49

:oops: Oh! Danke!

Ich habe den Fehler korrigiert.

14

08.06.2008, 11:17

Ahh da ist noch einiges falsch drin. Ehrlich gesagt solltest du einem der etwas erfahreneren Benutzer mal darüber gucken lassen, bevor du den Code hier postest :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
template<class T>
GTQueue<T>::~GTQueue()
{
    m_pFirst=NULL; //Zurücksetzen

    m_pLast=NULL;
    m_iElementsCnt=0;

    if(m_iElementsCnt)
        Delete();
}
... DAS ist ein Memeory Leak :P Und zwar nen gaaanz Großes. Der untere Teil wird vom Compiler rausoptimiert, da du m_iElementsCnt vor deiner if-Anweisung auf 0 stellst. Damit ist deine Bedingung immer false!

Das zurücksetzen ist sowieso im Destruktor unnütz. Was soll das bringen?
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

15

29.07.2008, 15:36

Hm und hab mir gerade den Code nochmal angeguckt. Code-Style: 5 :D
Und dieses GTResult ... boa nur weil David mal ne runde tbResult anlegt muss nicht jede Klasse so nen Quatsch drin haben :D Arbeite mit Referenzen, mit const, mit unsigned usw.! Und Exception s'il vous plaît.
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

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

16

29.07.2008, 15:48

Sentinel Nodes erleichtern einem das Leben übrigens ganz enorm!
@D13_Dreinig

Werbeanzeige