CArray Problem



  • Ich erstelle mit:

    CArray <Suchparameter*, Suchparameter*> SPA;
    

    ein CArray als Membervariable,das Erstellen läuft ohne Probleme ab.
    Aber wenn ich später darauf so

    SPA[1]->GetUrl(1);
    

    zugriffen will,stürzt das Programm mit Unbehandelter Ausnahme ab.Wenn ich die Suchparameter nicht in das Array packe funktioniert die Funktion.

    [ Dieser Beitrag wurde am 31.07.2002 um 14:45 Uhr von Andorxor editiert. ]



  • Hi,

    Geh mal mit dem Debugger rein und schau, wo genau er abschmiert. Ich vermute, dass du einen noch nicht belegten Index benutzt oder keinen sinnvollen Pointer eingetragen hast.



  • Er schmiert ab wenn er auf eine der Membervariable von Suchparameter zugreifen will.Ich habs auch beim erstellen der Klassen debuged da,wird ohne Probleme drauf zu gegriffen.
    So fülle ich das Array:

    SPA.Add(new Suchparameter(val.intVal));
    


  • Noch ein Ansatz zum Fehlersuchen:

    Ersetze mal

    SPA[1]->GetUrl(1);
    

    durch

    Suchparameter* pSuchTemp = SPA[1];
    pSuchTemp->GetUrl(1);
    

    und schau dir im Debugger die Adresse von pSuchTemp und den Inhalt genauer an. Wenn dir was seltsam vorkommt, dann hast du zumindest eine Spur.
    Ansonsten bräuchte ich etwas mehr Code (kann aber nicht sagen, wie ich dazukomme was anzuschauen).



  • Das Programm sollte eigentlich,Daten aus einer Datenbank in das Array schaufeln,aber aus irgendeinen Grund is SPA[0] nicht richtig gefüllt,hab das Programm jetzt so abgeändert das es das Array erst ab Position 1 durchläuft,jetzt läuft es.Trotzdem würde ich gerne wissen warum das Programm das macht.Hier ist der Gesamte Code der das Array füllt.

    CDaoData base archiv;
      COleVariant val;
      archiv.Open("c:\\Eigene Dateien\\db3.mdb");
      CDaoRecordset r(&archiv);
      r.Open(dbOpenDynaset,"Select IdNr from Suchparameter",dbReadOnly);
      if(!r.IsEOF())
      {
       SPA.SetSize(r.GetRecordCount());
       r.MoveFirst();
       while(!r.IsEOF())
       {
        r.GetFieldValue("IdNr",val);
        SPA.Add(new Suchparameter(val.intVal));
        r.MoveNext();
       }
      }
      r.Close();
      archiv.Close();
    

    [ Dieser Beitrag wurde am 01.08.2002 um 09:21 Uhr von Andorxor editiert. ]



  • Ich kann nicht garantieren, dass meine Erklärung richtig ist, aber für mich stellt sich das wie folgt dar:

    SPA.SetSize(r.GetRecordCount());
    

    Da du auf r noch keinen MoveLast() oder ähnliches hast, wird dir nicht die echte Zahl der Zeilen angegeben, sonder i.a. eine 1. Die legst also ein Array der Größe 1 an (dein Element 0, dass dann nicht funktioniert).
    Weiter unten hast du dann:

    SPA.Add(new Suchparameter(val.intVal));
    

    Durch diese Anweisung hägst du an das exsitierende Array einen weiteren Eintrag an und füllst diesen mit "new Suchparameter...".
    In der Summe erklärt das das Verhalten deines Programms.

    Abhilfe:
    Entweder:
    Mache vor dem SetSize r.MoveLast() und ersetze das

    SPA.Add(new Suchparameter(val.intVal))
    

    durch

    SPA[iIndex] = new Suchparameter(val.intVal)
    

    ,
    wobei du iIndex in deiner Schleife von 0 aufwärts duchlaufen lassen musst.
    Oder:
    Spar dir dein SetSize(). Dann bewirkt dein erstes "Add" das erzeugen des 0-ten Elements usw.



  • Danke jetzt läufts.


Anmelden zum Antworten