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

Anonymous

unregistriert

31

20.09.2008, 10:06

Haxx0r
Außerdem fängst du keine Exceptions ab um allokierten Speicher wieder frei zu geben. Besser so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
Message::Message (void) try : 
    p_Message->s_p_GetPC.num_array (8),
    p_Message->s_p_GetPC.array (new bool[p_Message->s_p_GetPC.num_array]) //,

    // Weitere allokierungen und initialisierungen

{
}
catch (...)
{
    delete [] p_Message;
    throw;
}

David_pb

Community-Fossil

  • »David_pb« ist der Autor dieses Themas

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

32

20.09.2008, 10:23

Noch besser:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Message::Message (void) try :
    p_Message->s_p_GetPC.num_array (8),
    p_Message->s_p_GetPC.array (new bool[p_Message->s_p_GetPC.num_array]) //,

    // Weitere allokierungen und initialisierungen

{
}
catch ( std::bad_alloc& )
{
    throw;
}
catch (...)
{
    delete [] p_Message;
    throw;
}
@D13_Dreinig

Anonymous

unregistriert

33

20.09.2008, 10:38

David_pb
Das mit dem bad_alloc weiß ich nicht ob so gut ist, da das throw; im catch (...)-Block doch nicht die Signatur abändert, oder?

Anonymous

unregistriert

34

20.09.2008, 10:57

kleine frage am rande: meint ihr mit WTF What the Fuck?!

Anonymous

unregistriert

35

20.09.2008, 11:03

ja

David_pb

Community-Fossil

  • »David_pb« ist der Autor dieses Themas

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

36

20.09.2008, 11:03

Zitat von »"unsigned long"«

David_pb
Das mit dem bad_alloc weiß ich nicht ob so gut ist, da das throw; im catch (...)-Block doch nicht die Signatur abändert, oder?


Ja, aber es tut nicht gut einen uninitialisierten Zeiger zu löschen! ;)

Zitat von »"Spiri"«


kleine frage am rande: meint ihr mit WTF What the Fuck?!


Ja.
@D13_Dreinig

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

37

26.04.2011, 18:48

Ahh.. Endlich habe ich den Thread gefunden. :)

Also gibts gleich mal ein paar Schnipsel.

Bei einem Anfänger völlig Ok, aber nicht doch der Muster Implementierung eines Hochschulkures, wo es um Numerische Methoden geht.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
    ~FFT() {};
    
    void Free(void)
    {
        delete [] in_re;
        delete [] in_im;
        delete [] out_re;
        delete [] out_im;
    }

Da hat jemand offensichtlich das Konzept von Konstruktoren/Destruktoren nicht ganz verstanden

Dann gehts gleich weiter

C-/C++-Quelltext

1
2
3
4
5
6
7
8
template<int channel>
void _printToASCII(GridType & grid, const char * filename)
{
...
if (channel==0) fprintf(f, "%e  %e  %e\n",Real(gidx)/Real(gN),block(ix).f[0],block(ix).f[1]);
...
}
{

Hier hat jemand wohl den Sinn von templates nicht ganz verstanden.

Man beachte was der Funktionsname impliziert und es wirklich tut:

C-/C++-Quelltext

1
2
3
4
5
6
// ---------------------------------------------------------
// 4. INVERT tri-diag MATRIX: f = A^(-1)*f_hat
//    using Thomas-Algorithm along the direction dir
// ---------------------------------------------------------
void _Invert_TriDiag(int dir)
{...}

Das das ganze auf globalen Arrays arbeitet ist da ja fast heilig dagegen.

Auch sehr schön anzuschauen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
    if ( strcmp ("FE",solver_type) == 0 ) {
        _stepFE();
    }  else if ( strcmp ("BE",solver_type) == 0 ) {
        _stepBE();
    } else if ( strcmp ("CN",solver_type) == 0 ) {
        _stepCN();
    } else if ( strcmp ("ADI",solver_type) == 0 ) {
        _stepADI();
    } else {
        printf("solver_type=%s --> not yet implemented, check simulation parameters", solver_type);
    }

Hier ist anzumerken, dass dieses Stück sehr oft aufgerufen wird und solver_type ein Parameter ist, den man beim starten des Programmes angibt. Macht natürlich seeehr viel Sinn das in jeder Iteration nochmal zu überprüfen, ob sich was geändert hat.. :rolleyes:


Und das ist alles Code, welcher von Assistenten einer Vorlesung für fortgeschrittene Numerik (genauer: numerische Methoden für partielle Differentialgleichungen) geschrieben wurde.
Irgendwie macht mir das Angst. -.-

//EDIT
Hach.. da findet man ständig neue Sachen:

C-/C++-Quelltext

1
if (true) fft.PerformFourierTransform();

Ohne Mist. Das ist alles echter Code. 1:1 kopiert!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »drakon« (26.04.2011, 18:58)


xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

38

27.04.2011, 07:15

Das sieht nach typischem Code von Elektrotechnikern aus... ;)

Zu schade, dass ich diesen Thread vergessen habe... im CMS in das ich mich letztens einarbeiten musste waren einige wirkliche Juwelen für diesen Thread ;)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

39

29.08.2011, 20:04

Und es geht mal wieder weiter.. (gleiche Quelle, wie oben). Am Donnerstag haben wir Prüfung und ich muss solchen Code in Musterlösungen lesen:

C-/C++-Quelltext

1
2
3
const Real denom_p = lab(ix+1).f[0]-lab(ix).f[0];
const Real denom_m = lab(ix).f[0]-lab(ix-1).f[0];
const Real ap = denom_p==0? lab(ix).f[0]  : [...]


Hmm. Vor allem in numerischer Mathematik würde ich nicht zu viel darauf geben, dass eine Flieskommazahl exakt 0 wird.. (Real = double).

40

29.08.2011, 23:51

Hmm. Vor allem in numerischer Mathematik würde ich nicht zu viel darauf geben, dass eine Flieskommazahl exakt 0 wird.. (Real = double).


Woah, DAS durfte ich einem Mitstudenten ueber Wochen und MONATE hinweg erzaehlen ... denkst du der Vollhorst haette mir das auch nur ein einziges mal geglaubt - nein er ist dann bei seiner Praesentation genau desweegen auf die Schnauze geflogen.
Na ja .... aus Fehlern und nicht auf andere hoeren lernt man - oder auch nicht ... wie in seinem Fall ...
(gut auch noch wegen anderen Sachen aber da habe ich's dann aufgegeben gegen seinen besserwisserischen Dickschaedel anzukaempfen ^^ )

Werbeanzeige