[Résolu] problème d'adresse avec new
Bonjour,
j'ai un gros problème lors de plusieurs appel à new (sauf si j'ai fumé quelque chose ou que je suis plus que zéro en C++ :oops:)
j'essaie de faire une classe qui gère le temps (encapsulation des fonctions du C time ... )
une fois la classe fini, je fais une fonction de test avec plusieurs variables pour tester les différentes fonctions de ma classe et là, je me retrouve avec une jolie erreur de windows "l'instruction à "0xxxxxxx" emploie l'adresse mémoire "0xyyyyyyy". la mémoire ne peut pas être "read"... et suivant ce que je commente comme ligne, ça va plus ou moins loin dans le code...
en fait, suivant les combinaisons de ligne commentée, je peux exécuter des lignes qui provoquaient des erreurs et provoquer des erreurs là où sa marchait ...
bref .. tout ça pour dire que j'ai cherché un petit moment sur le net pour savoir pourquoi l'erreur de la mémoire ne peut pas être read aparaissé .. et dans mon cas, sa serai une mauvaise gestion des adresses pointé...
d'où ma question : d'où ça pourrait venir ?
avec le code suivant, l'erreur apparait au niveau du constructeur avec time_t (ligne 34).
si je fais un delete(montime3) après le bloc précédent, ça va un peu plus loin mais sa plante également :(. Il faut un delete après chaque bloc pour que sa puisse passer au bloc suivant !
mais, au niveau de la ligne 86, c'est encore pire.. j'ai fait plusieurs new d'affilé sur montime3 pour tester l'erreur et ça plante,
si je les enlève, il faut obligatoirement un delete(montime3) avant le bloc de test "AJOUT Date" même si j'en ai fait un précédemment..sinon ça plante et après, lors de l'ajout, montime3 et montime4 pointent sur le même objet alors que les fonctions appelées sont en const ! :calim2: là je n'y arrive plus :arf:
en fait, c'est comme si la variable montime3 avait un bogue mais seulement elle ! :mur:
Code:
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
1 void TestTDateTime()
2 {
3 TDateTime *montime=NULL;
4 TDateTime *montime2=NULL;
5 TDateTime *montime3=NULL;
6 TDateTime *montime4=NULL;
7
8 //Test constructeur par défaut
9 cout<<"Test constructeur par défaut"<<endl;
10 montime = new TDateTime();
11 {
12 ....
13
14 }
15
16 //Test des autres constructeurs
17 cout<<endl<<"Test constructeur par recopie"<<endl;
18 montime2 = new TDateTime(*montime);
19 {
20 ....
21 }
22
23
24 //Test constructeur DOUBLE
25 cout<<endl<<"Test constructeur double"<<endl;
26 montime3 = new TDateTime((double)(2147483647)); //limite de date !! 214783647 = 2^32-1
27 {
28 ....
29 }
30
31
32 //TEST constructeur time_t
33 cout<<endl<<"Test constructeur time_t"<<endl;
34 montime3 = new TDateTime(montime->toTime_t());
35 {
36 ....
37 }
38
39 //Test constructeur String
40 cout<<endl<<"Test constructeur String"<<endl;
41 montime3 = new TDateTime(montime->toString());
42 {
43 ....
44 }
45
46 //Test constructeur String
47 cout<<endl<<"Test constructeur String"<<endl;
48 montime3 = new TDateTime(montime->toString());
49 {
50 ...
51 }
52
53 //TEST Constructeur YYYY MM DD HH MM SS
54 cout<<endl<<"Test constructeur YYYY MM DD HH MM SS"<<endl;
55 montime3 = new TDateTime(montime->getDate()->tm_year,montime->getDate()->tm_mon,montime->getDate()->tm_mday,montime->getDate()->tm_hour,montime->getDate()->tm_min,montime->getDate()->tm_sec);// montime->getMilliSeconds()));
56 {
57 ...
58 }
59
60
61 //Boucle temporelle
62 for(long long i=0;i<999999999;i++);
63 cout<<endl<<"Test de différence"<<endl;
64 montime4 = new TDateTime();
65 {
66 ...
67 }
68
69
70 //TEST Constructeur HH MM SS
71 cout<<endl<<"Test constructeur HH MM SS"<<endl;
72 montime4=NULL;
73 montime4 = new TDateTime (montime->getDate()->tm_hour,montime->getDate()->tm_min,montime->getDate()->tm_sec, montime->getMilliSeconds());
74 {
75 ...
76 }
77
78 montime3=NULL;
79 montime3 = new TDateTime();
80 montime3 = new TDateTime();
81 montime3 = new TDateTime();
82 montime3 = new TDateTime();
83
84 //TEST Ajout Date
85 cout<<endl<<"Test Ajout date"<<endl;
86 montime3= new TDateTime((*montime)+montime4);
87 {
88 ...
89
90 printf("___ %p ___ %p ___%lf ___ %lf", montime3,montime4,(montime3->getDate()),(montime4->getTime()));
91 ...
92 }
93
94 delete(montime3);
95
96 //TEST suppression Date
97 cout<<endl<<"Test suppression date"<<endl;
98 montime3= new TDateTime(*montime-*montime2);
99 {
100 ...
101 }
102 delete(montime3);
103
104 //TEST Ajout secondes
105 cout<<endl<<"Test Ajout secondes (+1h)"<<endl;
106 montime3= new TDateTime((*montime+3600));
107 {
108 ...
109 }
110 delete(montime3);
111
112 //TEST suppression secondes
113 cout<<endl<<"Test suppression secondes (-1h)"<<endl;
114 montime3= new TDateTime((*montime-3600));
115 {
116 ...
117 }
118
119 delete(montime4);
120 delete(montime3);
121 delete(montime2);
122 delete(montime);
123
124} |