Bonsoir,
Je rencontre un comportement bizarre lorsque je redéfinie les opérateurs new et delete. Voici mon code très simple :
La sortie est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 #include <iostream> #include <stdio.h> #include <stdlib.h> #include <vector> #include <new> using namespace std; inline void* operator new(size_t size, char* filename, unsigned int line) throw (std::bad_alloc) { printf("operator new\n"); return malloc(size); } inline void* operator new[](size_t size, char* filename, unsigned int line) throw (std::bad_alloc) { printf("operator new[]\n"); return malloc(size); } inline void operator delete(void* m) throw() { printf("operator delete addr=%p\n", m); free(m); } inline void operator delete[](void* m) throw() { printf("operator delete[]\n"); free(m); } inline void operator delete(void* m, char* filename, unsigned int line) { printf("operator delete with param\n"); } inline void operator delete[](void* m, char* filename, unsigned int line) { printf("operator delete[] with param\n"); } #define new new(__FILE__, __LINE__) int main() { std::vector<int> vect; vect.push_back(5); cout << "Hello world!" << endl; return 0; } /* int* pt = new int(); delete pt; */
Presque un Hello World ^^ avec un vector.Hello world!
operator delete addr=00651790
Et justement, la ligne vect.push_back(5) provoque un appel à l'une de mes fonctions surchargées de l'opérateur Delete. Pourtant il n'y a pas de "new" correspondant pour l'adresse mémoire 0x00651790... Et vue que le but est de traquer les fuites de mémoires, cet appel n'est pas le bienvenue
J'ai testé avec d'autres classes comme std::string et std::map, même soucis !
Que ce passe t-il ?
Merci beaucoup
Partager