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

Ada Discussion :

Access check failed : Pointeur et String


Sujet :

Ada

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Access check failed : Pointeur et String
    Bonjour. En sujet de projet de fin d'année, nous devons réaliser un SGBD avec le langage ADA. Jusque là vous me suivez. Néanmoins première foncion premier problème qui pour moi est insoluble.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    --p_bdd.ads
     
    type t_base;
       type t_bdd is access t_base ;
     
       type t_base is record
                nom_base: string(1..80);
                table: t_table;
       end record ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    -- p_bdd.adb
     
    function creation_bdd return t_bdd is
          S: String(1..80):=(others=>' ' );
          L: integer;
          Base : t_bdd;
       begin
          Base := NULL;
          Put_line("Entrez le nom de la base de données");
          Get_line(S,L);
          Base.nom_base(1..L):=S(1..L);
          return Base;
      end creation_bdd;
    Pas d'erreur lors de la compilation, cependant : raised CONSTRAINT_ERROR : p_bdd.adb:16 access check failed lors de l'éxécution. J'ai cherché un peu partout et je n'ai pas trouvé de solutions miracles. La ligne 16 étant " Base.nom_base(1..L):=S(1..L); ".

    Merci d'avance pour votre aide ! N'hésitez pas à demander des informations complémentaires !

  2. #2
    Membre actif

    Homme Profil pro
    Mathématicien et développeur
    Inscrit en
    Mars 2012
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Mathématicien et développeur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 132
    Points : 241
    Points
    241
    Billets dans le blog
    3
    Par défaut
    Regarde bien ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          Base := NULL;
          ...
          Base.nom_base(1..L):=S(1..L);
    Rien de bizarre ?...

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Même lorsque je fais base.nom_base:=S(1..L) sa ne fonctionne pas :s

  4. #4
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2009
    Messages : 214
    Points : 383
    Points
    383
    Par défaut
    Même lorsque je fais base.nom_base:=S(1..L) sa ne fonctionne pas :s
    Tu ne regardes pas au bon endroit. Comme Zerte, je te dirai, regardes bien ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Base := NULL;
    ...
    Base.nom_base(1..L):=S(1..L);
    Tu verras c'est nul comme petite erreur

  5. #5
    Invité
    Invité(e)
    Par défaut
    Les accès sont initialisés à "null" par défaut avec Ada.
    Par contre il doit bien falloir faire quelque chose avant d'alouer cet accès.

  6. #6
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2009
    Messages : 214
    Points : 383
    Points
    383
    Par défaut
    Les accès sont initialisés à "null" par défaut avec Ada.
    Par contre il doit bien falloir faire quelque chose avant d'alouer cet accès.
    Rhaaaa, tu donnes la solution alors que c'est pour un projet d'étudiant !!!! Il fallait le laisser chercher un peu.

    Bon, en tout cas, même s'il est vrai que les pointeurs sont initialisés à NULL par défaut, là, c'est carrément mis explicitement.

    Maintenant, je ne peux que conseiller à hAppywAy de lire la page Wikibook associée aux types accès.

  7. #7
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2012
    Messages : 29
    Points : 49
    Points
    49
    Par défaut
    hAppywAy, le principe du pointeur n'est pas celui d'une simple variable et encore moins d'un type record. En fait ton pointeur est une variable contenant une adresse mémoire (et rien d'autre que ça). Autrement dit, ce n'est pas le contenu de ton pointeur qui est utile mais le contenu de l'emplacement mémoire vers lequel il pointe.

    Par défaut, Ada initialise les pointeurs à Null donc la ligne ci-dessous, si elle constitue un bon réflexe, est inutile en Ada (mais pas en C par exemple) :

    Ensuite quand tu écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Base.nom_base(1..L):=S(1..L);
    Tu devrais plutôt écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Base.all.nom_base(1..L):=S(1..L);
    Le langage Ada permet ce raccourci mais du coup tu sembles oublier que Base n'est pas un objet de type structuré (record) mais un pointeur valant NULL ! Pour accéder au contenu pointé, tu utilises Base.all, sauf que ton pointeur ne pointe sur rien ! Tu dois auparavant réserver un espace mémoire vers lequel pointera Base.

    Pour créer ton objet pointé, il te suffira d'écrire :

    Ensuite tu pourras affecter une valeur à Base.all ! Mais seulement après.

  8. #8
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2009
    Messages : 214
    Points : 383
    Points
    383
    Par défaut
    Sigurd9, il faut pas donner toute la réponse, il est étudiant, c'est pour un projet de fin d'année et on a déjà donné toutes les billes

    Pour ce qui est de la notion des pointeurs, je conseille toujours cette vidéo pour Ada ou pour d'autres langages, la page.

Discussions similaires

  1. [Free Pascal] Pointeur en string
    Par ducelier dans le forum Free Pascal
    Réponses: 9
    Dernier message: 18/09/2009, 00h36
  2. Problème pointeur et string
    Par jodan33 dans le forum Langage
    Réponses: 4
    Dernier message: 25/08/2008, 08h58
  3. stsadm -importlist : Security check failed in OnFileImport
    Par gdkenny dans le forum SharePoint
    Réponses: 1
    Dernier message: 28/04/2008, 12h43
  4. Pointeur thread string
    Par KNETUS dans le forum Langage
    Réponses: 1
    Dernier message: 31/08/2007, 18h37
  5. Réponses: 10
    Dernier message: 06/09/2006, 09h01

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