[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [HS] mauvaise gestion mémoire sous Linux



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 to: