QT4.5, G++,GCC: intercepter SIGSEV (ou tester un pointeur douteux)
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

QT4.5, G++,GCC: intercepter SIGSEV (ou tester un pointeur douteux)



  1. #1
    Bounoume

    QT4.5, G++,GCC: intercepter SIGSEV (ou tester un pointeur douteux)


    ------

    bonsoir,
    suis incapable de débusquer ce qui est très probablement un pointeur vers un objet détruit précédemment (par erreur, bien sùr!)
    Même en testant souvent et en éliminant les pointeurs qui ont une valeur NULL .....

    Je viens de tester l'instruction delete en debuging:
    .... targets_stack0[index0].item_instance= new ...... etc...... /......

    delete (targets_stack0[index0].item_instance); //pour test:SUPPRIMER !!!!!!!
    debugr=targets_stack0[index0].item_instance; // la valeur du pointeur n'EST PAS mise à NULL !
    En débogage, ça provoque évidemment un plantage un peu plus loin quand le programme appelle le fameux item_instance......
    mais l'inspection de la variable
    "objet * debugr"
    renvoie toujours la valeur initiale (et initialement valide) non NULL

    J'en déduis que "delete" ne remet pas à NULL le pointeur déréférencé.
    Est-ce exact?
    merci d'avance

    -----
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  2. #2
    Jack
    Modérateur

    Re : QT4.5, G++,GCC: intercepter SIGSEV (ou tester un pointeur douteux)

    Citation Envoyé par Bounoume Voir le message
    J'en déduis que "delete" ne remet pas à NULL le pointeur déréférencé.
    Est-ce exact?
    En effet, delete ne fait que restituer au système la zone mémoire réservée et n'agit pas sur le pointeur.
    En conséquence, la valeur pointée restera identique jusqu'au moment où une autre allocation par un new (faite par un autre pointeur ou le même) la réserve et qu'une écriture soit effectuée.

    PS: est-ce bien raisonnable de travailler encore avec Qt 4.5?

  3. #3
    Spazi

    Re : QT4.5, G++,GCC: intercepter SIGSEV (ou tester un pointeur douteux)

    Citation Envoyé par Bounoume Voir le message
    J'en déduis que "delete" ne remet pas à NULL le pointeur déréférencé.
    Est-ce exact?
    merci d'avance
    C'est exact.

  4. #4
    Bounoume

    Re : QT4.5, G++,GCC: intercepter SIGSEV (ou tester un pointeur douteux)

    Citation Envoyé par Jack Voir le message
    PS: est-ce bien raisonnable de travailler encore avec Qt 4.5?
    obligation par force majeure: je suis sous Ubuntu 16.04, et les dépôts officiels ne proposent que la version 4.5 de QT , et je ne souhaite pas prendre une version payante pour un usage personnel non commercial....
    ni bien sûr migrer vers autre chose (rien d'équivalent connu d'ailleurs en logiciel libre....)
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  5. A voir en vidéo sur Futura
  6. #5
    Bounoume

    Re : QT4.5, G++,GCC: intercepter SIGSEV (ou tester un pointeur douteux)

    Comment alors détecter un futur accès mémoire illégal avant que ne soit déclenché le signal et l'arrêt du programme?

    Y a-t-il moyen de tester l'intégrité de l'objet référencé par 1 pointeur douteux, et non NULL (données, pointeurs sur ses fonctions) sans provoquer d'exception?
    Y a-t-il moyen de lancer un throw récupérable par catch ?

    note: en creusant bien, je suis capable aussi de dépasser les limites d'un tableau de dimension[i] déterminée! grrrr..... mais ça c'est une autre histoire!

    remarque: quels services peut rendre valgrind (la version intégrée à QT4.5)?
    merci d'avance
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  7. #6
    Jack
    Modérateur

    Re : QT4.5, G++,GCC: intercepter SIGSEV (ou tester un pointeur douteux)

    Citation Envoyé par Bounoume Voir le message
    Comment alors détecter un futur accès mémoire illégal avant que ne soit déclenché le signal et l'arrêt du programme?
    C'est toi qui prends la responsabilité de "relâcher" le pointeur, donc à priori tu sais qu'il ne faut plus l'utiliser.

    Il est recommandé de ne plus utilisé les pointeur nus. La norme intègre les smart pointers depuis la norme de 2011. Tu devrais jeter un œil de ce côté.

    obligation par force majeure: je suis sous Ubuntu 16.04, et les dépôts officiels ne proposent que la version 4.5 de QT
    Tu peux directement installer Qt en téléchargeant au préalable Qt installer sur le site de Qt il me semble.

  8. #7
    polo974

    Re : QT4.5, G++,GCC: intercepter SIGSEV (ou tester un pointeur douteux)

    qt5 est dans ubu 16.04:
    https://packages.ubuntu.com/search?l...s&keywords=qt5

    il y a (au moins) 2 moyens de se retrouver avec un pointeur qui déclenche un SIGSEV:
    • un delete a libéré la mémoire ( et celle-ci a été restituée au système).
    • un débordement de tableau voisin du pointer l'a écrasé avec des données.
    le premier peut être évité avec les smart ptr (il gère tout seul le delete).
    le second peut être éviter avec at(x) à la place de [x] (c++11).

    (mais quand on est bon, on peut travailler sans filet (b.. ou c.., allez savoir... )

    (une troisième façon d'avoir un pointeur pourri est de l'allouer sur la pile, de garder un pointeur (global ou autre) dessus, sortir de la fonction et l'utiliser au travers du second pointeur...)
    Jusqu'ici tout va bien...

  9. #8
    Bounoume

    Re : QT4.5, G++,GCC: intercepter SIGSEV (ou tester un pointeur douteux)

    Merci.
    je vais voir ces objets smart pointers...... si ça évitait des erreurs......

    pour at(x) je crois comprendre (merci duckduckgo ou google) que c'est un objet conteneur de char* ou string ?????
    Pour ce qui est des char*, par paresse j'utilise déjà l'objet QString, tout bête, pour tout ce qui est du texte, recherche de sous-chaînes et charcutage du résultat à afficher......

    Pour la version active de QT, sur ma machine, je suis très perplexe.....
    Avec le gestionnaire de paquets, QT5 default et QT5make sont bien déjà installées (depuis l'installation initiale il y a 1 an );

    QT Creator (l'EDI ) se prétend basé sur Qt 5.5.1 (GCC 5.2.1 20151129, 64 bit)
    la version de QT Assistant est par contre 4.8.7
    (avec seulement la version 4 de la syntaxe connect (&source, SIGNAL (fonction_source(...), &dest, SLOT(fonction_appelée(...);
    Il y a presque 1 an, ici même j'avais constaté que le compilateur (GCC/G++ ?) refusait la syntaxe alternative ajoutée en version 5......

    EN examinant les options de QT Creator, je trouve
    compiler & exécuter -> versions de QT -> Qt 5.5.1 in PATH (qt5) ET Qt 4.8.7 in PATH (qt4)...... je sélectionne la 5, demande 'appliquer' puis ferme.. et il ne se passe rien...

    donc les 2 versions me semblent sont bien dèjà chargées, et reconnues, dont la dernière..... mais je ne trouve pas le moyen de forcer la 5.....
    Quand je ferme puis rouvre la fenêtre options, les 2 versions de compilation sont listées sans qu'une soit marquée comme active.

    Pour la doc, il n'y a que trolltech.assistant.487... rien en version 5 par contre
    Désespérant.... trouve pas d'issue pour forcer la version (et obtenir la doc ad hoc)
    Comment faire?

    PS. sur le site que tu indiques, il y a les fichiers (paquets?) à télécharger.... mais peut-être pas inclus les scripts de mise à jour (qui seraient exécutés par apt-get (via synaptic ?)
    Je n'ai pas envie de tenter le Diable et de faire manuellement (et mal....) le ménage puis installer nouveaux fichiers... et mettre à jour les dépendances associées.
    Je maîtrise pas.....
    Ce me semble risqué.... et irréversible en cas de pépin....
    Dernière modification par Bounoume ; 20/11/2019 à 22h27.
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  10. #9
    Jack
    Modérateur

    Re : QT4.5, G++,GCC: intercepter SIGSEV (ou tester un pointeur douteux)

    Je confirme: tu vas sur le site de Qt et tu choisis la version open source. Tu lances le fichier que tu as téléchargé (c'est un .run) et tu vas ensuite pouvoir utiliser le Qt maintenance tool dans lequel tu choisiras ce que tu veux installer exactement.

Discussions similaires

  1. [Autre] comment faire d'un pointeur satellite un pointeur tnt
    Par toutoune44 dans le forum Électronique
    Réponses: 4
    Dernier message: 19/02/2018, 17h00
  2. intercepter SIGKILL possible ?(les signaux )
    Par invitee2f3230c dans le forum Programmation et langages, Algorithmique
    Réponses: 12
    Dernier message: 15/02/2011, 21h12
  3. télescope douteux...
    Par invite19e90147 dans le forum Archives
    Réponses: 8
    Dernier message: 11/07/2004, 19h09