Try Catch



  • Das Array weiß ja nicht wie gross es ist, kann also so nicht feststellen, dass du hier auf nicht allozierten Speicher zugreifst. Wie Ringding schon sagte überschreibst du dir hier eine andere (evtl. genutzte) Speicherstelle. Wenn dein Programm dann darauf zugreifen will kann es abschmieren (also viel später).



  • Hallo

    Zur Deklaration : schau dir doch den Code der Projekt-Datei an, dort ist der Haupt Try-Catch Block.
    Zum Array : Wenn du DynamicArray oder std::vector nimmst, werden ordentliche Out-Of-Range Exceptions geworfen.

    bis bald
    akari



  • Aber auch nur, wenn man at() und nicht [] verwendet.



  • Hallo,

    So wird auf jede Exception reagiert, egal welche :

    __fastcall TForm1::TForm1(TComponent* Owner) 
        : TForm(Owner) 
    { 
        blah = new unsigned char[10]; 
    } 
    //--------------------------------------------------------------------------- 
    
    void __fastcall TForm1::Button1Click(TObject *Sender) 
    { 
        try 
         { 
            blah[100000] = 10; 
         } 
         catch( ... ) 
         { 
              Application->MessageBox(".......",".......",MB_OK); 
         } 
    }
    

    Bis dann denn,
    🙂
    Nash



  • Das ist schon richtig, aber ein Speicherzugriffsfehler ist in sämtlichen anderen Umgebungen keine Exception. Das ist nur in BCB so.



  • ClientSocket1->Active = false;
         ClientSocket1->Port = 500;
         ClientSocket1->Address = "localhost";
         ClientSocket1->Host    = "localhost";
         try
         {
         	ClientSocket1->Active = true;
    
         }
         catch( ... )
         {
    		Application->MessageBox("Cannot Connect","Client Error", MB_OK);
    
         }
    

    Wie kann ich die Socket Exeption "Asynchroner Socket-Fehler 10061" abfangen.
    Mit der wie oben gezeigten Methode Funkt es nicht.



  • guck mal in die bcb-hilfe zum OnError-Ereignis des TClientSocket



  • Das OnError Ereignis nutz ich schon, verhindert aber trotzdem nicht die
    Exeption, gibt es da nicht eine Möglichkeit in dem OnError Ereignis die
    Exeption zu löschen?
    Habe das schon mal irgendwo gelesen.



  • wenn du in der bcb hilfe zum on error ereignis geschaut hättest wüsstes du wie man die exception verhindern kannst.

    aber mal ein tip: ErrorCode



  • Manchmal steht ja doch was Sinnvolles in der Borland Hilfe.

    void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
          TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
    {
          Edit3->Text = "INVALID CONNECTION";
          ClientSocket1->Active = false;
          ErrorCode = 0;
    }
    

    Hätte das ganze auch schon mal genauer betrachten können, zumal eine
    Referenz auf ErrorCode mit übergeben wird, habe aber schon soviel
    verwirrendes Zeugs in der Borland Hilfe gelesen das ich manchmal schon
    garnicht mehr weiterlese.

    Danke für die Hilfe.



  • wg Hilfe:

    schonmal hier geguckt: http://www.junix.ch/bcb/help/hilfe.html ?


Anmelden zum Antworten