3 Stimmen

Wer ist für das Löschen zuständig?

Ich habe einen Code analysiert und bin bei einem bestimmten Code verwirrt. Ich habe den Code/Pseudocode gepostet, der die gleiche Bedeutung vermittelt.

Klasse 1

Class1::Func1()
{
    Collection* cltn;   
    try
    {
        cltn = Class2::get_records_from_db();
    }
    catch(Informix error)
    {}
    catch(DB Error)
    {}
    catch(...)
    { Unknown exception }          //I get this error always once the process processes lot of records   
}

Klasse 2

Collection* Class2::get_records_from_db()
{
    Collection *clt = new Collection();
    try
    {

        //Query database
        For each row in query result
        Row *row = new row();
        populate(row)
        clt->add(*row)

         ...
        if( Informix error)
        {
            throw Informix error;
        }  
     }

     catch(...)
     {
          delete clt;  //Who will delete row?
          clt = 0;
          throw Db error 
     }

    return clt;  //Who will delete clt?
}

Problem - Teil 2

Danke für den Einblick in das erste Problem. Hier ist nun das eigentliche Problem, das auftritt.

Class 1 ist ein C++-Prozess und Class 2 ist eine Bibliothek, die mit der Informix-Datenbank kommuniziert. Class2::get_records_from_db() ist eine Funktion, die eine Informix-DB abfragt und die Ergebnismenge zurückgibt. Ich habe den obigen Code verbessert, der dem echten Code ähnlicher ist.

Collection Objekte handelt mit 200k von row Objekte, die, wie die meisten von Ihnen sagten, nicht richtig freigegeben werden.
Der Aufrufer sieht "Unbekannte Ausnahme" im allgemeinen Catch-Block. Kann das an den riesigen Speicherlecks liegen, die in Class 2 ?

Ich sehe auch einige Informix-Fehler 406 (Out of memory error) in den Protokollen. Der Prozess macht einen Core-Dump, nachdem er eine Reihe von Unknown Exception & SQLERR406

Ich möchte wissen, ob der Core Dump ein Nebenprodukt der Speicherlecks ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X