Du bist nicht angemeldet.

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 525

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 771

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 525

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