» »

Zakaj try-catch v C++ sesuje program?

Zakaj try-catch v C++ sesuje program?

mojca ::

Prvič v življenju testiram try-catch v C++. Sledeči program:
#include <iostream>
using namespace std;
int main() {
   char *buf;
   try {
      buf = new char[210];
      if( buf == 0 ) {
         throw "Memory allocation failure!";
      } else {
         throw "No error to catch. :)";
      }
   }
   catch( char * str ) {
      cout << "Exception raised: " << str << '\n';
   }
}

na Mac-u brez težav prevedem in poženem z
g++ ime.cpp -o ime

Če taisto poizkusim pod polkni 7 (MinGW-jev prevajalnik), se mi program sesuje rekoč "This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information."

Zakaj???

V bistvu bi rada napisala C-jevski program, vendar je hendlanje napak tam prava mora, tako da mi je v redu, če preklopim na C++, vendar ...

Hvala za kakršenkoli hint.

techfreak :) ::

Priporočam uporabo programa Visual Studio. Express verzija je zastonj in se lahko downloada iz naslednje strani: http://www.microsoft.com/express/downlo...

Z MinGWjem sem imel kar nekaj težav na Windows Vista/7 in sem raje prešel na Visual C++.

mn ::

Poizkusi dodati v zadnjo vrstico

return 0;

Nisem prepričan, vendar bi znal biti to razlog.

noraguta ::

kero verzijo minga pa maš?
Pust' ot pobyedy k pobyedye vyedyot!

napsy ::

Namesto:
catch( char * str ) {

napiš:
catch(const char * str ) {

EDIT: ali pa bolj c++ varianto:

#include <iostream>
#include <string>
using namespace std;
int main() {
    char *buf;
    try {
        buf = new char[210];
        if( buf == 0 ) {
            throw std::string("Memory allocation failure!");
        } else {
            throw std::string("No error to catch. :)");
        }
    }
    catch( std::string str ) {
        cout << "Exception raised: " << str << '\n';
    }
    return 0;
}

"If you die, you die. But when you live you live. There is no time to waste."

Zgodovina sprememb…

  • spremenil: napsy ()

boogie_xlr ::

Dokler imaš
using namespace std;
ni potrebno pisat std::

rasta ::

catch( std::string str ) {

Ne tako delat. Tu po nepotrebnem kličeš kopirni konstruktor. Uporabljajte reference! Takole:
catch( std::string& str ) {


Pa uporabi using namespace std; na začetku datoteke se tudi izogibajte (stvar za biti tečna, ko v večjih projektih definiraš kakšne lastne funkcije á la max()).
Uporabi se ga po potrebi znotraj posamezne funkcije.

BigWhale ::

boogie_xlr je izjavil:

Dokler imaš
using namespace std;
ni potrebno pisat std::


Ne, ne, ne! Tega ne smes imeti!

Kdo hudirja vas take traparije uci?! ;)

boogie_xlr ::

Za začetnike in take male(hitre(za napisat)) programčke je jusing nejmspejc čist vredi.

rasta ::

Ne ni. Začetniki morajo pisati programe strogo po šolsko, drugače se že v začetku navzamejo kup slabih navad, ki vodijo k prebedenim nočem ob iskanju trivialnih hroščev v njihovi špageti kodi v njihovi nadaljni karieri.

boogie_xlr ::

Okej, ukinat using namespace!

BigWhale ::

Ce je mejhen in hiter program potem je lazje trikrat napisat std:: kot using namespace std; :>

boogie_xlr ::

OK, ampak zakaj potem using namespace? A ni boljše da ga kar odstranimo iz c++ standarda?

rasta ::

Zato ker pride prav. Npr. imaš funkcijo, kjer formatirano izpišeš veliko podatkov (in to z uporabo io manipulatorjev, se pravi std::setw ipd.).
V splošnem pa nočeš preveč mešat imenske prostore. V ta namen so tudi uvedli konstrukt namespace v C++ jezik.

mn ::

boogie_xlr je izjavil:

OK, ampak zakaj potem using namespace? A ni boljše da ga kar odstranimo iz c++ standarda?


Poleg tega je tudi stvar scope-a. Jaz osebno včasih uporabljam using namespace znotraj funkcije kjer se le-ta ogromno uporablja. Ampak ne vem, če bi to kdaj naredil z namespace-om std kjer je res ogromno nekih simbolov deklariranih in je prevelika verjetnost da sta enaka simbola deklarirana v dveh različnih namespace-ih.

Ponavadi pa raje namespace samo preimenujem. Recimo:

namespace lnn = SomeLong::NamespaceName;

boogie_xlr ::

Well, jaz še nikoli nisem imel problemov z using namespace std, drugač pa hvala za tole, zveš marsikaj na novo.

BigWhale ::

boogie_xlr je izjavil:

Well, jaz še nikoli nisem imel problemov z using namespace std, drugač pa hvala za tole, zveš marsikaj na novo.


Potem se nisi delal na kaksni vecji stvari. :)

boogie_xlr ::

Itak da ne, če sem šele 1. letnik faksa.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java]: replace - slovar v txt

Oddelek: Programiranje
121692 (1550) Spura
»

[NALOGA][Java] Branje vsebine datoteke vzvratno

Oddelek: Programiranje
71609 (1551) SkIDiver
»

[C++] Portabilna funkcija za kopiranje datotek

Oddelek: Programiranje
172252 (1908) Gundolf
»

Pointer-ji v C-ju

Oddelek: Programiranje
291775 (1473) rokpok
»

Coding Style

Oddelek: Programiranje
433461 (2653) 64202

Več podobnih tem