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 :

Comprendre les tableaux


Sujet :

Delphi

  1. #1
    Membre averti
    Homme Profil pro
    sans
    Inscrit en
    Mars 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : sans
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2014
    Messages : 10
    Par défaut Comprendre les tableaux
    Bonjour
    Ceci est mon premier post...Je decouvre delphi à 44 ans, en amteur...

    J aimerais comprendre un truc sur les tableaux

    j ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
      Tab_0: array [1 .. 100] of double;
    begin
     
      for I := 1 to 100 do
        Tab_0[I] := random(100000);
     
      for I := 1 to 300 do
        Memo1.Lines.Add(inttostr(I) + #9 + floattostr(Tab_0[I]));
     
    end;
    L'affichage s'effectue alors que la taille du tableau est limitee a 100 et que j affiche 300 valeurs...
    Certaines valeurs son affichée 'NAN'...
    Je ne comprends pas !

    Un peu d aide serait sympa de votre part car j etais convaincu que cela planterait...

    merci

    stephane

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2012
    Messages : 92
    Par défaut
    le NAN pour "Not a Number"
    le tableau étant initialisé à 100, tu peux lire sans pb. au dessus, tu lis dans une zone mémoire non allouée par ton tableau.
    il se peut que tu arrives à lire quelque chose (ou pas) mais si tu écris dans un indice au dessus de 100, tu risques d'avoir des violations d’accès dues à l'écrasement mémoire

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 937
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    C'est un choix en fait.

    Il est possible de systématiquement lever une exception en activant la "Vérification des limites" {$R+} mais ce contrôle est assez coûteux en temps ce qui peut être assez pénalisant. A la place, on préférera lancer une boucle entre Low (premier indice du tableau) et High (dernier) garantissant la validité de sa taille (et rendant par conséquent ce test obsolète).

    Par contre, tu ne pourras pas statiquement écrire Tab_0[300]. Là, le compilateur va râler

  4. #4
    Membre averti
    Homme Profil pro
    sans
    Inscrit en
    Mars 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : sans
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2014
    Messages : 10
    Par défaut
    Merci pour vos reponses

    Je pensais que cela leverait une exception des le 101, comme cela se produit si on essaie de lire un tstringlist avec un indice > que sa taille...
    je vais utiliser low et high, ce sera plus sur

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 937
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    Tu n'accèdes pas directement à la mémoire dans le cas du TStringList. La propriété Strings est encapsulée. Les getter/setter se chargent du contrôle de validité et le cas échéant lèvent une exception

  6. #6
    Membre averti
    Homme Profil pro
    sans
    Inscrit en
    Mars 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : sans
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2014
    Messages : 10
    Par défaut
    Merci...
    J ai compris la precision

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

Discussions similaires

  1. Mais pourquoi ... Avec IE les tableaux sont décentrés ?
    Par nebule dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 26/11/2004, 10h04
  2. Article sur les tableaux dynamiques
    Par Eric Sigoillot dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2004, 22h00
  3. Réponses: 14
    Dernier message: 01/09/2003, 22h46
  4. Les tableaux en PL/SQL
    Par GRUMLY dans le forum PL/SQL
    Réponses: 5
    Dernier message: 12/08/2002, 18h10

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