IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

problème d'adresse avec new


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Architecte logiciel
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut [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++ )

    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 ! là je n'y arrive plus
    en fait, c'est comme si la variable montime3 avait un bogue mais seulement elle !

    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
    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}

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour et bienvenu,
    Le problème a l'air de se situer dans TDateTime. Peux-tu la présenter ?
    Ou alors dans les obscurs {...}. Qu'il y-a-t-il dedans ?

  3. #3
    Membre chevronné Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Par défaut
    Tu as quelques problème d'étoile (*) dans ton code... Du plus, tu fais souvent des new sur des variables qui n'ont pas été delete (pas bon quand même).

    Pour ton erreur principale, je dirai que tu devrai surtout jeter un œil à tes getters.

    Après, peut-être y-a-t'il un pb d'espace. L'objet passer en new est-il gros ?

  4. #4
    Futur Membre du Club
    Profil pro
    Architecte logiciel
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut
    Bonsoir,

    en ce qui concerne les obscurs { ... } c'est tous les mêmes en fait et il y a seulement les appels des fonctions "toString" "toTime_t" et "toHHMMSS" implémanté dans la classe TDateTime.
    c'est pour afficher la date et voir ainsi si ça fonctionne.


    pour le problème d'étoile et de "non delete" c'est justement fais exprès pour provoquer le problème...

    pour le code de TDateTime, je le récupère dès que je peux, je suis en alternance et je dois récupérer cette classe mais elle est vraiment simple ...
    juste un truc, c'est que j'utilise beaucoup de conversion entre la structure : struct tm et time_t .
    la classe TDateTime contient une time_t comme variable temps et lorsque je souhaite l'afficher, je la convertie en struct tm pour faire ce qu'il faut.

    mais vue l'erreur, j'ai eu l'idée que ça pourrai venir du compilateur ou quelque chose comme ça... j'utilise eclipse et MinGw avec gcc 4.4.1 et comme cette version n'est pas dans la branche "stable" de MinGw ... je ne sais pas trop ...
    d'autant plus qu'au niveau de la ligne 90, les deux new différents sur deux variables différentes pointent sur la même adresse :/

    quoi qu'il en soit, je ramène le code de TDateTime dès que je l'ai ...

  5. #5
    Futur Membre du Club
    Profil pro
    Architecte logiciel
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut OK
    Bon, j'ai trouvé la réponse à mon problème. j'essayais de delete un struct tm or ce n'est pas possible ...

Discussions similaires

  1. Problème avec New Delete TComponentList
    Par frantzgac dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2010, 17h22
  2. Problème d'adresse avec CopyFolder
    Par tarmo57 dans le forum Débuter
    Réponses: 0
    Dernier message: 21/08/2008, 19h18
  3. Problème avec new
    Par Azharis dans le forum C++
    Réponses: 18
    Dernier message: 27/04/2005, 17h45
  4. Problèmes de versions avec Xalan, Xerces et Java
    Par honeyz dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 05/06/2003, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo