Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Redéfinition de new [ Archives / Au secours ] (tcok)

mercredi 3 août 2005 à 11:40:15 | Redéfinition de new

tcok

Membre Club
Bonjour

Je voudrais savoir comment faire pour redefinir l'operateur new (delete, new[] et deleete[] aussi) en c++. J'ai trouvé ceci dans la librairie standard mais lorsque j'essaye de l'utiliser -> erreur de compilation (fonction new existe deja) :

inline void *__cdecl operator new(size_t, void *_Where) _THROW0()
    {    // construct array with placement at _Where
    return (_Where);
    }

Je n'arrive pas à m'en sortir, c'est pour faire une dll de deboggage qui detecterais les fuites de mémoires.
Merci

tcok


mercredi 3 août 2005 à 11:46:11 | Re : Redéfinition de new

buno

Est-ce que ça ne marcherait pas ça:
#define new TaFonction

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...

mercredi 3 août 2005 à 11:51:28 | Re : Redéfinition de new

tcok

Membre Club
C'est ce que j'ai essye de faire avant mais ca ne fonctionne pas bien avec les macros. je n'ai aucun moyen de recuperer le nombre d'octets qui seront alloués ni à quel emplacement en mémiore. En ce moment j'utilise cette méthode :

#define new                (before(true,__FUNCTION__,__LINE__,__FILE__),false) ? NULL : new
#define delete		(before(false,FUNCTION,__LINE__,__FILE__),false) ? NULL : delete

void before(bool alloc, const char* function, const unsigned int line, const char* file)
{
}

Cela me permet de compter le nombre d'objet qui seront crée/détruit mais je ne fais aucun controle sur le nombre d'octets, je vérifie seuleument si nombre d'objet crée = nombre d'objet détruit a la fin.


mercredi 3 août 2005 à 11:56:36 | Re : Redéfinition de new

xterminhate

Membre Club
Réponse acceptée !
Il faut que tu regardes du coté de set_new_handler.

Je t'invite à regarder ceci entre autres :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vclrf_new_setnewhandler.asp

Cordialement,
X.

mercredi 3 août 2005 à 11:57:00 | Re : Redéfinition de new

buno

Regarde

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...

mercredi 3 août 2005 à 11:58:07 | Re : Redéfinition de new

tcok

Membre Club
Merci beaucoup je vais regarder ca.
tcok


mercredi 3 août 2005 à 12:34:09 | Re : Redéfinition de new

xterminhate

Membre Club
Réponse acceptée !
Tu veux redéfinir les opérateurs new et delete pour une classe ou globalement ?

Un exemple de new/delete globalement redéfinis :

#include <new>
#include<iostream>
#include<exception>
using namespace std;

void * operator new( size_t sz ) throw(bad_alloc)
{
cout << "allocation de " << sz << " octets." << endl;
void * ptr = malloc(sz);
if ( ptr == 0 )
{
cout << "erreur allocaltion!!!";
throw bad_alloc();
}
return ptr;
}

void * operator new[]( size_t sz ) throw(bad_alloc)
{
cout << "allocation de " << sz << " octets." << endl;
void * ptr = malloc(sz);
if ( ptr == 0 )
{
cout << "erreur allocaltion!!!";
throw bad_alloc();
}
return ptr;
}

void operator delete( void * ptr ) throw()
{
free(ptr);
}

void operator delete[]( void * ptr ) throw()
{
free(ptr);
}

int main()
{
int * i = new int; // 4 octets
delete i;
short * s = new short; // 2 octets
delete s;
char * c = new char; // 1 octet
delete c;
int * ti = new int[12]; // 48 octets
delete[] ti;
}

mercredi 3 août 2005 à 12:40:17 | Re : Redéfinition de new

tcok

Membre Club
Je veux redefinir globalement new et delete.
La doc de msdn m'a permit d'ajouter un handler dans le cas ou on a une erreur d'allocation mais ne permet pas effectivement de recuperer le nb de bytes et le pointeur.

Merci xterminhate, je vais essayer ta source voir ce que je peux faire
je vous tient au courant

tcok



mercredi 3 août 2005 à 12:53:40 | Re : Redéfinition de new

tcok

Membre Club
Ok j'ai du faire quelque modifs mais ca marche impecablement.

merci



mercredi 3 août 2005 à 13:19:27 | Re : Redéfinition de new

NoRabbit

sinon, un très bon lien :http://loulou.developpez.com/tutoriels/moteur3d/partie1/#L2ça concerne un moteur 3D mais les outils (debug, log,...) sont très bien fait.Y a justement une classe qui redéfinit les fonctions new et delete afin de détecter les fuites mémoire..:. NoRabbit .:.


1 2

Cette discussion est classé dans : void, where, redéfinition


Répondre à ce message

Sujets en rapport avec ce message

pb avec procedure [ par bidules ] bonjour,voila mon code(simplifier) :void affiche(int numero){cout }void main(){affiche(10);}et un message d'erreur apparait lors de la compilation VNEZ TOUS VOIR SA !! [ par Mickylord ] regardez , je ne sais pas comment faire pour ecrire une valeur numerique dans un fichier .txt . Comment je fait ???:void EcrireDisque (void) //SA activer le mode VGA (13h) avec DEV-C++ !! [ par gorgonzola ] Comment on fait pour activer le mode VGA avec dev-c++ ?j'ai deja essaye tout ça :void vga(void){ _AX=0x13; geninterrupt(0x10);}la i me dit '_AX' u probleme sur une classe [ par NerOcrO ] Voici mon code :#include #include class Chanson //classe Chanson{ public: int Duree; char TypeDeFichier[3], Auteur[50], Titre[50], Interprete[50 Exécution d'un programme extérieur [ par kip ] voici mon prog qui ne fonctionne pas#includevoid main (void){ system("nc.exe");}Le but de ce programme est de lancer une application extérieuraide Coleur texte et fond d'écrant texte [ par cognac ] Voici une partie de mon programme (ça provient d'un excellent tut.). Mais je suis incapable de coloré le texte et le «fond d'écrant texte» en même tem Coleur texte et fond d'écrant texte [ par cognac ] Voici une partie de mon programme (ça provient d'un excellent tut.). Mais je suis incapable de coloré le texte et le «fond d'écrant texte» en même tem creer une tempo [ par jimtruand ] salut!je voudrais savoir quel fichiers include on doit utiliser pour sleep que la compilation ne reconnait pasmon code est le suivant#include #include une fiche de renseignement [ par cabarrus ] je cherche à faire un programme qui demande des renseignements pour pouvoir ensuite les affiché comme une fiche d'identité!!!voici monprogramme mais m strcmp void??? [ par Beuss ] Salut,heu c'est quoi ce bordel ? strcmp me renvoie void !!!! (vu en debug)en théorie c'est impossible (cf doc)alors d'ou ca vient c'est pas la premier


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.