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

Qt Discussion :

Violation d'accès en lecture avec QMetaObject


Sujet :

Qt

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    Décembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Décembre 2008
    Messages : 53
    Points : 44
    Points
    44
    Par défaut Violation d'accès en lecture avec QMetaObject
    Bonjour, à tous,

    Je viens ici car j'ai un problème avec un code récupéré d'une ancienne version de Qt (5.6 et de mon côté je suis en 5.12.5). Lors du lancement, j'ai droit à une exception disant "The inferior stopped because it triggered an exception. Stopped in thread 0 by exception at 0x796d5058, code: 0xc0000005: read access violation at 0x10, flags=0x0 (first chance)." sous Qt Creator et "Exception levée à 0x01A35058 (Qt5Cored.dll) dans TestBench.exe*: 0xC0000005*: Violation d'accès lors de la lecture de l'emplacement 0x00000010.".

    La ligne en question est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_handler = metaObject ()->method (metaObject ()->indexOfMethod (HANDLER));
    La partie posant problème est l'appel à la méthode "indexOfMethod". Le code est le suivant:

    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
    class QQmlObjectListModelBase : public QAbstractListModel { // abstract Qt base class
        Q_OBJECT
        Q_PROPERTY (int count READ count NOTIFY countChanged)
     
    public:
        explicit QQmlObjectListModelBase (QObject * parent = Q_NULLPTR) : QAbstractListModel (parent) { }
     
    public slots: // virtual methods API for QML
        virtual int size (void) const = 0;
        virtual int count (void) const = 0;
        virtual bool isEmpty (void) const = 0;
        virtual bool contains (QObject * item) const = 0;
        virtual int indexOf (QObject * item) const = 0;
        virtual int roleForName (const QByteArray & name) const = 0;
        virtual void clear (void) = 0;
        virtual void append (QObject * item) = 0;
        virtual void prepend (QObject * item) = 0;
        virtual void insert (int idx, QObject * item) = 0;
        virtual void move (int idx, int pos) = 0;
        virtual void remove (QObject * item) = 0;
        virtual void remove (int idx) = 0;
        virtual QObject * get (int idx) const = 0;
        virtual QObject * get (const QString & uid) const = 0;
        virtual QObject * getFirst (void) const = 0;
        virtual QObject * getLast (void) const = 0;
        virtual QVariantList toVarArray (void) const = 0;
     
    protected slots: // internal callback
        virtual void onItemPropertyChanged (void) = 0;
     
    signals: // notifier
        void countChanged (void);
    };
     
    template<class ItemType> class QQmlObjectListModel : public QQmlObjectListModelBase {
    public:
        explicit QQmlObjectListModel (QObject *          parent      = Q_NULLPTR,
                                      const QByteArray & displayRole = QByteArray (),
                                      const QByteArray & uidRole     = QByteArray ())
            : QQmlObjectListModelBase (parent)
            , m_count (0)
            , m_uidRoleName (uidRole)
            , m_dispRoleName (displayRole)
            , m_metaObj (ItemType::staticMetaObject)
        {
            static const char* HANDLER = "onItemPropertyChanged()";
     
            m_handler = metaObject ()->method (metaObject ()->indexOfMethod (HANDLER));
            if (!displayRole.isEmpty ()) {
                m_roles.insert (Qt::DisplayRole, QByteArrayLiteral ("display"));
            }
        }
     
        void onItemPropertyChanged (void) Q_DECL_FINAL 
       {...}
    J'ai tenté de remplacer la ligne en question par le code suivant mais j'ai toujours le même problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const QMetaObject* pObject = metaObject();
    QByteArray signature= pObject->normalizedSignature(HANDLER);
    int idx = pObject->indexOfMethod(signature.data());
    m_handler = pObject->method(idx);
    Si quelqu'un à une idée.
    Merci d'avance.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Peut être pObject est NULL ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    Décembre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Décembre 2008
    Messages : 53
    Points : 44
    Points
    44
    Par défaut
    Merci de la réponse mais j'ai finis par trouver ce qu'il manquait comme informations par rapport au projet. Une partie est à compiler avec Visual Studio (les drivers) et la partie applicative avec GCC, et jusqu'à présent je n'utilisais que le compilateur de Visual studio.

    J'avais regardé pour pObject, il n'est pas nul mais son contenu oui c'est cela qui pose problème avec Visual studio mais avec GCC, c'est initialisé. Je ne vais pas chercher plus que cela pour le moment, je verrais ce point plus tard si j'ai le temps.

    Merci encore.

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

Discussions similaires

  1. violation d'accès en release avec tinyXml
    Par Maliono dans le forum C++
    Réponses: 11
    Dernier message: 01/07/2016, 18h16
  2. C++: Violation d'accès à la lecture
    Par seb68270 dans le forum C++
    Réponses: 24
    Dernier message: 28/02/2014, 15h36
  3. Violation d'accès en lecture écriture
    Par 3Fred9 dans le forum Langage
    Réponses: 5
    Dernier message: 30/03/2010, 14h36
  4. Problème de limitation en accès en lecture seule avec ma clé usb
    Par evangeliste dans le forum Administration système
    Réponses: 15
    Dernier message: 10/07/2006, 16h57
  5. Violation d'accès avec les composants Word 97/ 2000
    Par edechaux dans le forum Composants VCL
    Réponses: 3
    Dernier message: 07/03/2006, 09h48

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