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

Delphi Discussion :

Les erreurs d'écritures memoire ?


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Janvier 2015
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Les erreurs d'écritures memoire ?
    J'ai une erreur qui se manifeste au cours de l'exécution d'un programme de façon aléatoire sans que je puisse en trouver la cause et sans le bloquer.
    la touche F9 le relance jusqu'à l'apparition de nouveau de ce message:Nom : Sans titre-2.jpg
Affichages : 181
Taille : 118,3 Ko
    Si quelqu'un peut me donner une explication ?

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    yop !

    Un grand classique d'une tentative d'accès à un objet pas encore instancié ou libéré trop tôt. Si ça se produit n'importe où, faut revoir tout ton code, particulièrement là où tu crées des objets et là où tu les détruis.

    Bon courage...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut
    Bonjour.

    Personnellement, j'utilise ce petit "truc". C'est un peu comme un fichier .LOG , et c'en est un, ce qui ne m'empêche pas d'utiliser, dans les cas graves ( ) , le composant JvLogFile des Jedi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Procedure Machin; 
    begin
     
    	// Code manipulant des variables globales ...
            // Procedure_Appelante : string; 
     
    Procedure_Appelante := 'Machin';  // DEBUG
    Lister_Variables(Procedure_Appelante, 'Z-Machin.TMP');  // DEBUG
     
    	// Suite du code ...	
     
    end;
    La procédure listant l'état des variables à son appel :
    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
     
    Procedure Lister_Variables(Nom_Procedure : string; Nom_F_TMP : string);
    Var   Rep_Du_Prog : string;
     
    begin
          Rep_Du_Prog := ExtractFilePath(Application.ExeName);
     
          Lst_Debug := TStringList.Create;
     
          Lst_Debug.Add('Procedure_Appelante = ' + Nom_Procedure);
          Lst_Debug.Add('----------------------------');
          Lst_Debug.Add('');
     
          Lst_Debug.Add('Clef_Chn_Cherchee : ' + Clef_Chn_Cherchee);
          if Err_Reg_Constatee = True then Lst_Debug.Add('Err_Reg_Constatee : OUI')
          Else Lst_Debug.Add('Err_Reg_Constatee : NON');
     
          Nom_F_Tmp := Rep_Du_Prog + Nom_F_Tmp;
          Lst_Debug.SaveToFile(Nom_F_Tmp);
          Lst_Debug.Free;
    end;
    Si ça peut rendre service....

    J'utilisais quelque chose comme ça du temps de Tubo C et Turbo Assembleur. Avec Turbo Debugger, je l'utilisais moins, mais qd-même.

    S'il s'agit d'une erreur de pointeur (cf. la réponse de Jipété), on peut aussi la repérer comme ça. Ca m'est arrivé.

    @Jipété : "Objet non instancié" : ça revient bien à une erreur sur un pointeur, en quelque sorte ? Après tout, en POO, on utilise des pointeurs sur des structures, sur des fonctions, etc, même si le terme lui-même est peu employé ? Je me trompe ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Janvier 2015
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Eureka j'ai trouvé l'erreur
    Après avoir bataillé pas mal de temps, car le débogage ne situait pas l'erreur ?

    C'était simplement sur un (type array [1..4] of byte) j'allais chercher l'lndice 0 ce qui me provoquai une erreur aléatoire dans mon prog
    Il m'a fallu pratiquement refaire tout le prog pour voir quand l'erreur apparaissait, Comme quoi on s'embête des fois pour pas grand chose.
    Merci pour votre réponse que je garde de coté pour la prochaine erreur

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par bvsud Voir le message
    @Jipété : "Objet non instancié" : ça revient bien à une erreur sur un pointeur, en quelque sorte ? Après tout, en POO, on utilise des pointeurs sur des structures, sur des fonctions, etc, même si le terme lui-même est peu employé ? Je me trompe ?
    On peut dire ça... Encore que "erreur sur un pointeur" c'est plus que vague, mais bon, c'est dimanche, on va pas chipoter.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par polo69 Voir le message
    C'était simplement sur un (type array [1..4] of byte) j'allais chercher l'lndice 0 ce qui me provoquai une erreur aléatoire dans mon prog
    Cela m'arrive aussi
    En Debug, lorsque tu as une violation d'accès de ce genre, active l'option "Vérification des limites" c'est la direction R+ ou RANGECHECKS ON
    A ne surtout pas conserver en Release car cela génère un plus gros EXE plus lent et de plus l'exception ERangeError n'est pas du tout explicite mais cela donne une piste pour démarrer un Debug

    En Release, utilise toujours for Low(MonTableau) to High(MonTableau) do ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment detecter les erreur de gestion memoire
    Par adel25 dans le forum Langage
    Réponses: 2
    Dernier message: 29/12/2009, 23h45
  2. question sur les erreurs de compilation
    Par vince3320 dans le forum C
    Réponses: 5
    Dernier message: 19/04/2004, 11h34
  3. Recuperer les erreurs des requetes sql en asp
    Par emile13 dans le forum ASP
    Réponses: 3
    Dernier message: 01/04/2004, 13h49
  4. [web] comment afficher les erreur d'un cgi
    Par chtiboss dans le forum Web
    Réponses: 6
    Dernier message: 24/12/2003, 11h22
  5. Empecher les erreurs du débogeurs
    Par remixtech dans le forum EDI
    Réponses: 9
    Dernier message: 04/06/2003, 13h45

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