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

Langage C++ Discussion :

Probleme SIGINT lors d'un push_back de vector


Sujet :

Langage C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Probleme SIGINT lors d'un push_back de vector
    Bonjour à tous,

    je rencontre un problème que je n'arrive pas à comprendre dans un de mes programme.

    Pour résumer, ce programme reçoit des images de plusieurs camera, et j'aimerais stocker ces images dans un vector < vector < Image > > (un vector par camera, et dedans les images de la camera), le soucis c'est que cela fonctionne pour 9 images dans chaque vector, dès que je veux push_back la 10eme image, le programme plante, et le debug m'indique un SIGINT ??

    Voici mon code :

    Pour creer les vector :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (int i = 0; i < numCameras; i++) {
         vector<Image> row;
         images.push_back(row);
     }
    Et pour l'ajout d'images :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    images[numCam].push_back(rawImage);
    Je me demande si c'est un question de taille maximum, mais 10 images cela me semble mince quand meme...

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 123
    Points : 33 023
    Points
    33 023
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    un vector c'est un tableau, et comme tous tableaux ses indices vont de 0 à n-1.
    Donc que vaut numCam ? Est-ce la même valeur que numCameras ?
    Si oui, il y a débordement.
    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.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Non numCam est différent et d'après me tests il n'y a pas de debordement, de toute façon j'aurais un autre erreur sinon ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    En fait d'après mes tests l'erreur ne survient pas lors du push_back (erreur de ma part désolé), mais dans un fonction fournie dans l'API des cameras.

    Il y a peu de chance que vous puissiez m'aider, mais on sait jamais :

    Cette fonction (retrieveBuffer) va chercher la prochaine image de la camera (elle prend un pointeur d'image en paramètre), ensuite je push_back cette image dans mon vecteur. a votre avis comment ce push_back (seule fonction que j'ai rajouté), peut changer le comportement de retrieveBuffer et faire planter le programme ?

    Je vous met le code le toute la fonction, hésitez pas à me donner des pistes sur où chercher pour comprendre ce bug :

    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
     
    wxBitmap CamerasManager::getOneImage(Camera* myCam, int camPerLine, int numCam, bool save) {
        Image rawImage;
        wxSize PanelSize = frame->GetPanel2Size();
        //this->SetPropertyCam();
        //Retrieve an image
        wxMessageBox(wxString::FromUTF8("Avant")); // le porgramme affiche 9 fois avant et plante au 10eme sans afficher apres
        error = myCam->RetrieveBuffer(&rawImage);
        wxMessageBox(wxString::FromUTF8("Apres"));
        if (error != PGRERROR_OK) {
            wxMessageBox(wxString::FromUTF8("RetrieveBuffer"));
        }
        unsigned char* data;
        unsigned char* pData = rawImage.GetData();
     
        if (save == true){
     
            images[numCam].push_back(rawImage);
     
        }
        //Convert Image -> WxBitmap
        int size = rawImage.GetDataSize();
        data = (unsigned char*) malloc(size * 3);
        int y = 0;
        for (unsigned int i = 0; i < rawImage.GetCols() * rawImage.GetRows() * 3; i += 3) {
            data[i] = pData[y];
            data[i + 1] = pData[y];
            data[i + 2] = pData[y];
            y++;
        }
        wxImage img = wxImage(rawImage.GetCols(), rawImage.GetRows(), data, true);
     
        if((img.GetWidth()+10)*camPerLine+10 >PanelSize.GetWidth()) {
            int newWidth = PanelSize.GetWidth();
            float ratio = float(newWidth)/float(img.GetWidth());
            int newHeight = img.GetHeight()*ratio;
            img.Rescale(newWidth/camPerLine-(10+10/camPerLine) ,newHeight/camPerLine-10);
     
        }
        if((img.GetHeight()+15)*camPerLine+15 >PanelSize.GetHeight()) {
            int newHeight = PanelSize.GetHeight();
            float ratio = float(newHeight)/float(img.GetHeight());
            int newWidth = img.GetWidth()*ratio;
            img.Rescale(newWidth/camPerLine-10,newHeight/camPerLine-(15+15/camPerLine) );
     
        }
        wxBitmap bmp(img);
        free(data);
        return bmp;
    }

  5. #5
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 123
    Points : 33 023
    Points
    33 023
    Billets dans le blog
    4
    Par défaut
    pushBack utilise le constructeur par copie de rawImage pour l'ajouter.
    Le problème peut venir de ce constructeur par copie, ou la destruction de rawImage à la sortie de la fonction.
    Donc dans ton vector tu te retrouverais avec un objet (à moitié) pourri.
    Et l'erreur survient quand tu veux utiliser cette objet.
    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.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    J'en doute, parce que si j’arrête la fonction avant cette 10eme image, je suis capable de parcourir les images du vector et les enregistrer sans soucis sur le disk.

    Et l'erreur survient vraiment quand je veux récupérer une autre image venant du buffer, donc ça ne touche pas aux images enregistrée.

  7. #7
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 123
    Points : 33 023
    Points
    33 023
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par wxVince Voir le message
    le soucis c'est que cela fonctionne pour 9 images dans chaque vector, dès que je veux push_back la 10eme image, le programme plante, et le debug m'indique un SIGINT ??
    Citation Envoyé par wxVince Voir le message
    En fait d'après mes tests l'erreur ne survient pas lors du push_back (erreur de ma part désolé), mais dans un fonction fournie dans l'API des cameras.
    Citation Envoyé par wxVince Voir le message
    Et l'erreur survient vraiment quand je veux récupérer une autre image venant du buffer, donc ça ne touche pas aux images enregistrée.
    Désolé mais je ne te suis plus.
    Où et quand survient l'erreur ?
    Au push_back ? au parcours ? à l'accès au buffer ?
    Où et comment est déclaré images ?
    Comment traites-tu ton vector ? juste des push_back ? resize ? reserve ?

    Je ne sais pas exactement ce qu'est ce SIGINT, c'est sensé être lancé quand l'utilisateur veut interrompre le programme. Rencontres-tu un assert ? Une exception non gérée ?
    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.

Discussions similaires

  1. [Vector] Copie des éléments lors d'un push_back() ?
    Par 5kippy dans le forum SL & STL
    Réponses: 4
    Dernier message: 22/11/2007, 11h11
  2. problem oracle8i lors de l exportation
    Par mortet dans le forum Oracle
    Réponses: 1
    Dernier message: 24/01/2007, 18h09
  3. [type complex] problemes bizzards lors de la deserialisation
    Par djynwk dans le forum Services Web
    Réponses: 6
    Dernier message: 23/11/2006, 18h43
  4. [WinForms]probleme affichage lors d'un traitement
    Par Rankyboy dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 15/06/2006, 14h13
  5. Erreur lors de l allocation de Vector
    Par harsh dans le forum SL & STL
    Réponses: 4
    Dernier message: 21/05/2006, 18h11

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