new - exception [C++] - C++ - Programmation
Marsh Posté le 28-04-2003 à 11:25:14
il faut mettre un nom à ton exception!
Code :
|
[benoit@benserver C++]$ ./a.out 100 |
Marsh Posté le 28-04-2003 à 11:29:28
phod a écrit : Slt
|
Bon je sais pas kel compilo tu utilises mais ce code devrait marcher partout (testé sur Visual C++ 7)
Code :
|
Marsh Posté le 29-04-2003 à 09:22:38
Konar a écrit : |
hum... je suis inquiet: je n'arrive pas à le faire fonctionner sous win2000 + VC 6.0 (alors que ca marche sous linux/solaris avec gcc 3.2, ainsi que win2000/cygwin/gcc3.2)
Qq1 d'autre peux essayer sous win2000 et VC6.0 ? C'est embetant que cela ne fonctionne pas...
Code :
|
Marsh Posté le 29-04-2003 à 13:29:32
vc est à la boure
rajoute des .h aux entetes et vire tous les std::, je pense que ça devrait marcher...
Marsh Posté le 29-04-2003 à 13:30:54
sowhatin22 a écrit : |
je me réponds à moi même.
Le pb semble être connu. Le standard C++ (ANSI) dit que new doit générer une exception de type bad_alloc. Le compilateur Visual C++ 6.0 ne respecte pas cette norme, contrairement au ompilateur 7.0 ( .NET ).
zut...
Marsh Posté le 29-04-2003 à 14:54:22
++Taz a écrit : vc est à la boure |
Je ne vois absolument pas le rapport. Les entetes avec ".h" comme tu dis, sont de tres vieux entetes, laissés uniquement pour compatibilité. Il NE faut PAS les utiliser.
De plus pour virer tous les std il suffit d'ecrire juste sous les #include
Code :
|
Bon alors ensuite pour ce qui est du problème sous VC6. J'ai testé, ca compile. Ms il faut savoir ke VC6 date de 1998! (ptet meme 1997). Il respecte tres mal les standards C++ en ce qui concerne la STL surtout.
Notamment la gestion des exceptions est mal foutue. Il est donc possible que "new" ne throw pas la bonne exception.
Compile avec VC7 si tu peux.
Bon courage.
Marsh Posté le 29-04-2003 à 14:58:00
spa qu'on va apprendre la norme... j'ai jamais touché à VC, j'ai juste donné des indications sur ce qui ne pourrait pas marchait....
Marsh Posté le 29-04-2003 à 16:42:42
Konar a écrit : |
Bien sûr que cela compile. Mais au lieu de générer une exception, la fonction new renvoie un pointeur nul. En fait, si on veut que utiliser le mechanisme d'exception sur le new, je crois qu'il faut le dire explicitement. Si je reprends l'exemple précédent:
Code :
|
désolé, mais je suis obligé d'utiliser un .h parce que sinon, cela ne fonctionne pas. Je crois que je vais adopter cela, parce que c'est pas mal du tout, ce mécanisme d'exception quand la fonction new échoue.
Marsh Posté le 29-04-2003 à 17:04:03
sowhatin22 a écrit : |
As-tu installé le dernier service pack de VC++ 6 ? (ça doit être le 5 ou le 6)
Marsh Posté le 28-04-2003 à 11:18:34
Slt
Je voudrais tout simplement tester si mon new a pus obtenir ou non de la memoire.
Sur le net on me dis un peut partout que new genere l'exception bad_alloc...
je veut bien, mais comment je l'utilise ?
j'ai essayé pas mal de truc dont celui ci (qui ne compile pas : variable `class bad_alloc {anon}' has initializer but incomplete type)
void main(void)
{
while (1) // on alloue jusqu'a epuisement de la RAM
{
try
{
char *a = new char[10000];
}
catch (bad_alloc) // Si le new a echoue...
{
cout << "exception bad_alloc recue !" << endl;
exit(0);
}
}
}
Thx
---------------
Signatures aux choix Votez: O - Le python c'est bon, mangez-en O - L'abus de forum rend dependant, postez avec modération