On Friday 24 August (18:08),
Aurélien Campéas wrote:
>Le programme C++ suivant :
>
>#include <iostream>
>
>int main ()
>{
>       long taille;
>       int * pint;
>       int nbloc;
>       cout<<"Taille de bloc : ";
>       cin>>taille;
>       for (nbloc = 1; ; nbloc++) {
>               pint = new int[taille];
>               if (pint)
>                       cout<<"Alloc bloc n°"<<nbloc<<endl;
>               else {
>                       cout<<"Alloc impossible";
>                       break;
>               }
>       }
>}
>
>...engendre invariablement le message "Alloc impossible" sous AIX, 
>qqsoit la taille de bloc, lorsque le système a épuisé les ressources 
>mémoire.
>Sous Linux, en fonction de la taille de bloc demandée, on a un message
>"Abort"
>ou bien
>"Segmentation fault"
>mais JAMAIS "Alloc impossible"...
>
>Ca m'a vraiment surpris quand je l'ai découvert...

Le new du C++ n'a pas le meme comportement que le malloc du C: Quand la 
mémoire est pleine, il lève par défaut  une exception 'bad_alloc' (definie dan 
<new>). Tester la valeur de retour n'a donc aucun sens puisque l'affectation 
du pointeur n'est pas effectuée en cas de dépassement de capacité. Et ca 
marche bien sous linux! :) :)

  François Delobel



Reply via email to