berkov Temat założony przez niniejszego użytkownika  | 
[C++] Obsługa try ... catch » 2013-06-14 16:13:45 Hey ho. Mam pytanie dotyczase try-catch. Niby super dokumentacja: http://msdn.microsoft.com/en-us/library/vstudio/0yd65esw.aspx ale co mam wpisac do "(IOException e)" bo za cholere nie moge polapac co autor ma na mysli. zalozmy ze mam przyklad LPSTR string =( LPSTR ) GlobalAlloc( GPTR, 1 ); strcpy( string, "abcdefghijklamnoprst" );
  Aplikacja wyrzuci mi blad poniewaz w stringu nie bedzie miejsca na tyle znakow. Jak moge wylapac ten blad przez try-catch? skad mam wiedziec co mam wpisac w catch()? try {     LPSTR string =( LPSTR ) GlobalAlloc( GPTR, 1 );     strcpy( string, "abcdefghijklamnoprst" ); } catch( COWPISAC e ) {     MessageBox( 0, "przekroczyles ilosc znakow w stringu", "oj nie dobrze", 0 ); }
  Fajnie by bylo gdyby system dal mi jeszcze jakies dodatkowe info o bledzie, rozumiem ze bedzie to ukryte pod zmienna "e" w moim pryzpadku, ale jak to pozniej wykorzystac no i przede wszystkim skad wiedziec jakie IOException  uzyc? Zazwyczaj dokuemntacja jest dla mnie klarowna ale w tym konretnym przypadku chyba cos musialem ominac bo jej poprostu nie rozuiem, wiec prosze o naprowadzenie. dzieki b  | 
 | 
MrPoxipol  | 
» 2013-06-14 16:22:14  | 
 | 
Mrovqa  | 
» 2013-06-14 18:57:38 try {     switch( rand() % 5 )     {     case 0: throw 1;     case 1: throw 'h';     case 2: throw "destylarka  w sasiada";     case 3: throw 46.364;     case 4: throw moja_klasa( 54, "argumenty", konstruktora );     } } catch( int a )  {      } catch( char * str )  {      } catch(...)  {      }
  Powinno się rzucać wszystkim, co jest lub dziedziczy po std::exception (patrz dokumentacja).  | 
 | 
mostrom  | 
» 2013-06-14 22:59:21 | W każdej klauzuli catch jest podany - ujęty w parę nawiasów - typ obsługiwanego przez nią wyjątku. Kod obsługi wyjątku jest umieszczony wewnątrz nawiasów klamrowych |  
 | Klauzula catch składa się z trzech części: słowa kluczowego catch, deklaracji jednego typu lub DEKLARACJI jednego obiektu ujętej w parę nawiasów okrągłych oraz instrukcji złożonej |  
 catch( przekroczenieWymiaru ) { cout << "przekroczono wymiar"; return error1; } catch( Stan obiekt ) { cout << "przekroczono wymiar"; return error1; } catch( Stan & obiekt ) { cout << "przekroczono wymiar"; return error1; }  | 
 | 
Monika90  | 
» 2013-06-15 07:53:16 Niby super dokumentacja: http://msdn.microsoft.com/en-us/library/vstudio/0yd65esw.aspx |  
 Ta dokumentacja dotyczy C#. Pomimo podobnej do C++ nazwy, to inny język. LPSTR string =( LPSTR ) GlobalAlloc( GPTR, 1 ); strcpy( string, "abcdefghijklamnoprst" );  |  
 To jest UB, czyli niezdefiniowane zachowanie. I takie coś raczej nie powoduje zgłoszenia wyjątku C++. Może za to w Windows rzucić wyjątkiem typu SEH, ale też nie musi. Wyjatków SEH nie można wyłapać za pomocą try catch (ale patrz niżej), za to można je wyłapać za pomocą __try __except http://msdn.microsoft.com/en-us/library /s58ftw19%28v=vs.110%29.aspxniżej: W MSVC można złapać SEH za pomocą catch (...) zależnie od opcji kompilacji.  | 
 | 
berkov Temat założony przez niniejszego użytkownika  | 
» 2013-06-15 12:31:06 Dzieki wszystkim za pomoc ale wasze odpowiedzi dotycza sie glownie std:: i troche srednio odpowiadaja na moje pytanie. moze przerobmy to na moim konkretnymn przykladzie: try {     LPSTR string =( LPSTR ) GlobalAlloc( GPTR, 1 );     strcpy( string, "abcdefghijklamnoprst" ); } catch( COWPISAC e ) {     MessageBox( 0, "przekroczyles ilosc znakow w stringu", "oj nie dobrze", 0 ); }
  innyi slowy co wpisac w "COWPISAC"?  | 
 | 
jankowalski25  | 
» 2013-06-15 14:22:42 Możesz zrobić to prościej (bez wyjątków): CONST SIZE_T size = 1; LPCSTR lpData = "abcdefghijklamnoprst" LPSTR string =( LPSTR ) GlobalAlloc( GPTR, size ); if( lstrlen( lpData ) >= size ) MessageBox( 0, "przekroczyles ilosc znakow w stringu", "oj nie dobrze", 0 ); else lstrcpy( string, lpData );  | 
 | 
m4tx  | 
» 2013-06-15 15:00:18 | innyi slowy co wpisac w "COWPISAC"? |  
 Post wyżej masz przecież łopatologicznie napisane że to, co dałeś nie powoduje (a przynajmniej nie musi) rzucenia wyjątku. Co Ty chcesz więc łapać?  | 
 | 
|  « 1 »  2 |