[C++] Mémoire dispo
Résolu/Fermé
Omega_55
-
5 août 2006 à 22:52
mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 - 6 août 2006 à 21:57
mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 - 6 août 2006 à 21:57
1 réponse
mamiemando
Messages postés
32283
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 mars 2023
7 572
6 août 2006 à 21:57
6 août 2006 à 21:57
Version C
Il suffit de contrôler le code de retour de malloc/calloc.
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/malloc.3.html
Ne pas oublier le free associé au malloc/calloc.
http://www.manpagez.com/missing.php
Version C++
Si tu fais des new je pense que si le PC n'arrive plus à allouer il retourne un pointeur NULL. Ne pas oublier le delete associé.
Donc il suffit de calquer le raisonnement sur celui des malloc. Si tu instancies directement ton objet sans passer par un new ou un malloc/calloc le programme plantera au moment d'allouer avec un message d'erreur genre std bad alloc. Tu peux essayer de la rattraper avec un try catch, je ne sais pas si ça marche :
Bonne chance
Il suffit de contrôler le code de retour de malloc/calloc.
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/malloc.3.html
Ne pas oublier le free associé au malloc/calloc.
http://www.manpagez.com/missing.php
extern "C" {
#include <stdlib.h>
#include <stdio.h>
}
void f(){
char *plop = (char*)malloc(100000=sizeof(char));
if (!plop){
fprintf(stderr,"Pb allocation mémoire\n");
}
// je manipule plop
// ...
// quand j'ai fini :
free(plop);
}
Version C++
Si tu fais des new je pense que si le PC n'arrive plus à allouer il retourne un pointeur NULL. Ne pas oublier le delete associé.
Donc il suffit de calquer le raisonnement sur celui des malloc. Si tu instancies directement ton objet sans passer par un new ou un malloc/calloc le programme plantera au moment d'allouer avec un message d'erreur genre std bad alloc. Tu peux essayer de la rattraper avec un try catch, je ne sais pas si ça marche :
#include <iostream>
#include <vector>
class gros_truc{
public:
std::vector<double> plop;
gros_truc(unsigned int i=0){
plop = std::vector<double>(i);
}
};
int main(){
gros_truc g;
try{
g = gros_truc(10000000);
}catch(...){
std::cerr << "Pb allocation memoire" << std::endl;
}
return 0;
}
Bonne chance