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

C++ Discussion :

Problème d'allocation mémoire C++ / OpenCV


Sujet :

C++

  1. #21
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    Mais comme je l'ai dit, la norme C++ ne garantit pas que argv[0] contienne le nom du prog.
    Un environnement est libre de simplement passer 0 pour argc et un tableau d'un seul pointeur nul pour argv, juste à la fin d'une page.
    Et là, tu l'as dans le *** si tu tentes d'évaluer argv[1].
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  2. #22
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 53
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Mais comme je l'ai dit, la norme C++ ne garantit pas que argv[0] contienne le nom du prog.
    Un environnement est libre de simplement passer 0 pour argc et un tableau d'un seul pointeur nul pour argv, juste à la fin d'une page.
    Et là, tu l'as dans le *** si tu tentes d'évaluer argv[1].
    Ca c'est interressant effectivement, je n'ai jamais eu de cas où argv[0] != nom_prog, que ce soit sur windows, linus ou BSD, je vais aller farfouiller un peu par tout voir si je trouve plus de specifications la dessus .
    Merci pour ton commentaire constructif qui ne se contente pas de dire n'importe quoi sans arguments

  3. #23
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 4
    Par défaut
    Bonjour tout le monde

    merci pour ce développement ahurissant.

    Je compile en écrivant ça dans le terminal : g++ -g Main.cpp -o FBA -lopencv_core -lopencv_features2d -lopencv_highgui -lopencv_nonfree -lopencv_imgproc -lopencv_calib3d -I /usr/local/include/ -L /usr/local/lib

    et j’exécute avec ça : ./FBA REG_001.jpg REG_002.jpg REG_003.jpg REG_004.jpg REG_005.jpg REG_006.jpg REG_007.jpg REG_008.jpg REG_009.jpg REG_010.jpg

    En fait dans mon programme j'ai argv[1], ..., argv[10]. et toutes ces image passe par une première fonction sans problème.
    je vais tout de même ajouter le test d'erreur que vous m'avez proposé.

  4. #24
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 53
    Par défaut
    Citation Envoyé par Supasayajingoto Voir le message
    Bonjour tout le monde

    merci pour ce développement ahurissant.

    Je compile en écrivant ça dans le terminal : g++ -g Main.cpp -o FBA -lopencv_core -lopencv_features2d -lopencv_highgui -lopencv_nonfree -lopencv_imgproc -lopencv_calib3d -I /usr/local/include/ -L /usr/local/lib

    et j’exécute avec ça : ./FBA REG_001.jpg REG_002.jpg REG_003.jpg REG_004.jpg REG_005.jpg REG_006.jpg REG_007.jpg REG_008.jpg REG_009.jpg REG_010.jpg

    En fait dans mon programme j'ai argv[1], ..., argv[10]. et toutes ces image passe par une première fonction sans problème.
    je vais tout de même ajouter le test d'erreur que vous m'avez proposé.
    De maniere generale quand tu compiles je te suggere d'ajouter les flag -Wall -Wextra, cela ajoute des warnings a la compilation (cela te previendra en cas de variable non initialisé ou de variable non utilisé par exemple) et -Werror qui fait que les warning soient considérés comme des erreurs (et bloque donc la compilation). Ca peut paraitre lourd de se rajouter des erreurs mais je trouve personellement que mieu vaut un programme qui ne compil pas et qu'on pourra corriger, qu'un programme qui compil mais fait nimporte que sans qu'on s'en rende compte tout de suite

  5. #25
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nibors Voir le message
    Ca c'est interressant effectivement, je n'ai jamais eu de cas où argv[0] != nom_prog, que ce soit sur windows, linus ou BSD, je vais aller farfouiller un peu par tout voir si je trouve plus de specifications la dessus .
    argv[0] is the pointer to the initial character of a null-terminated multibyte strings that represents the name used to invoke the program itself (or an empty string "" if this is not supported by the execution environment)

    http://en.cppreference.com/w/cpp/language/main_function

  6. #26
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 174
    Billets dans le blog
    4
    Par défaut
    Euh l'assertion initiale
    Citation Envoyé par Nibors
    Ba si il est de taille 1 argv[1] n'est pas defini donc ca rentre pas dans le if
    n'en reste pas moins fausse : si un index d'un tableau n'est pas défini (comme c'est le cas de l'index 1 d'un tableau de taille 1..), c'est évalué à n'importe quoi et y'a toutes les chances du monde que ça soit à true et entre dans le if. Entraînant d'autant plus de n'importe quoi en voulant y accéder.
    Le cas particulier du premier paramètre du main n'est toujours qu'un cas particulier et n'a aucune raison d'être mentionné, encore moins soutenu et défendu, à un débutant. Et l'index 1 est totalement défini et vaut NULL si le programme est lancé sans paramètre supplémentaire. Mais c'est toujours qu'un cas particulier.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #27
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 407
    Par défaut
    En effet, argv est de taille argc+1.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Problème d'allocation mémoire
    Par Fibus dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 10/01/2008, 17h35
  2. Problème d'allocation mémoire
    Par elmayor1983 dans le forum C++
    Réponses: 5
    Dernier message: 14/02/2007, 11h08
  3. Problème d'allocation mémoire et fork
    Par Conap dans le forum Langage
    Réponses: 3
    Dernier message: 20/07/2006, 16h34
  4. Problème d'allocation mémoire
    Par araya dans le forum C
    Réponses: 2
    Dernier message: 04/05/2006, 21h03
  5. Problème d'allocation mémoire
    Par cali1983 dans le forum C++
    Réponses: 10
    Dernier message: 11/03/2006, 00h23

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