OVH Cloud OVH Cloud

Problème d'allocation

4 réponses
Avatar
fanny & michou
Bonjour,

Je programme a deux endroits différents (voir post : "Problème avec
abs") et bienqu'a mon travail mon programme s'exécute correctement, je
suis confrontée à une erreur chez moi :
une fois le programme lancé, j'ai le message d'erreur
" terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
Aborted"

Quelqu'un a-t-il une piste pour m'aider a resoudre ce problème?
C'est pas très agréable de programmer via une connexion ssh pas toujours
très rapide ;-)

Merci pour votre aide.
Fanny

4 réponses

Avatar
Jonathan Mcdougall
une fois le programme lancé, j'ai le message d'erreur
" terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
Aborted"

Quelqu'un a-t-il une piste pour m'aider a resoudre ce problème?


std::bad_alloc est lancé par new lorsqu'il n'y a plus de mémoire
disponible :

# include <iostream>


int main()
{
try
{

while (true)
{
int *i = new int[10000];
}

}
catch(std::bad_alloc&)
{
std::cout << "et voila" << std::endl;
}
}

Quelles genres d'opérations fais-tu avec new?


Jonathan

Avatar
Pierre Maurette
fanny & michou a écrit:

Bonjour,
Bonjour,

Problème d'allocation ?
http://www.caf.fr/
Bon week-end
--
Pierre

Avatar
fanny & michou
# include <iostream>


int main()
{
try
{

while (true)
{
int *i = new int[10000];
}

}
catch(std::bad_alloc&)
{
std::cout << "et voila" << std::endl;
}
}

Quelles genres d'opérations fais-tu avec new?


Jonathan


Ben je créé un nouvel objet : il bloque au moment de
créer une matrice je crois donc vector< vector <int>>.
Mais je comprends pas : ca marche a mon travail parce
qu'il y a plus de mémoire?

Avatar
Jonathan Mcdougall
fanny & michou wrote:

# include <iostream>


int main()
{
try
{

while (true)
{
int *i = new int[10000];
}

}
catch(std::bad_alloc&)
{
std::cout << "et voila" << std::endl;
}
}

Quelles genres d'opérations fais-tu avec new?



Ben je créé un nouvel objet : il bloque au moment de
créer une matrice je crois donc vector< vector <int>>.


Peux-tu montrer un peu de code? Comme std::vector utilise
habituellement new et delete, il est possible qu'il manque de mémoire à
l'interne.

Mais je comprends pas : ca marche a mon travail parce
qu'il y a plus de mémoire?


std::bad_alloc ne peut être lancé que parce que new n'a pas fonctionné.
Comme habituellement, new utilise malloc et que malloc utilise la
mémoire vive du système, une des conclusions possibles est que tu
manques de mémoire vive chez toi, mais que ça marche à ton travail.
Est-ce possible?

Jonathan