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 :

Expression : is_block_type_valid(header->_block_use)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 427
    Par défaut Expression : is_block_type_valid(header->_block_use)
    Bonjour,

    j'ai implémenté Tesseract sous Windows (Visual C++)

    mais en utilisant ce code

    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
    #include <tesseract/baseapi.h>
    #include <leptonica/allheaders.h>
     
    void test()
    {
        char *outText;
     
        tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
        // Initialize tesseract-ocr with English, without specifying tessdata path
        if (api->Init(NULL, "eng")) {
            fprintf(stderr, "Could not initialize tesseract.\n");
            exit(1);
        }
     
        // Open input image with leptonica library
        Pix *image = pixRead("/usr/src/tesseract/testing/phototest.tif");
        api->SetImage(image);
        // Get OCR result
        outText = api->GetUTF8Text();
        printf("OCR output:\n%s", outText);
     
        // Destroy used object and release memory
        api->End();
        delete api;
        delete [] outText;
        pixDestroy(&image);
     
        return 0;
    }
    j'ai cette erreur

    Expression: is_block_type_valid(header->_block_use)
    causée par la ligne
    un autre problème
    provoque le crash de l'application

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Mais pourquoi utilises-tu les operateurs new et delete? On ne doit normalement jamais avoir besoin d'utiliser cela.

    L'erreur est due au delete [] outText, la variable outText n'est jamais initialisée. Supprime toutes les lignes concernant cette variable, ça devrait nettement mieux se dérouler.

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 427
    Par défaut
    C'est l'exemple de Tesseract, j'ai juste repris le code d'exemple ici.
    Après je peux commenter les 2 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //delete api;
    //delete [] outText;
    mais je risque d'avoir une fuite mémoire, est-ce que Visual C++ utilise une sorte de Garbage Collector pour vider les pointeurs qui ne sont plus utilisés dans une méthode ?

    la variable "outText" est utilisé dans cet exemple dans printf().

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    En effet, excuse moi, j'ai lu un peu vite.

    Ce qui m'a perturbé est le présence des new et delete qui sont totalement à proscrire en C++, du moins depuis 2011, mais même avant le RAII permettaient des API moins dangereuses.
    Et en regardant par exemple le code de GetUTF8Text(), on voit qu'en interne la chaine est gérée correctement en std::string mais est transformée en un type cracra au moment du return, c'est curieux!

    Du coup, je ne vois pas le pourquoi des erreurs.
    Est-ce bien 2 erreurs à l'exécution?
    Les 2 erreurs correspondraient à "le système de gestion de la mémoire dynamique est paumé", ce qui indique qu'en interne il y a eu une grave erreur de gestion dynamique de la mémoire.

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 427
    Par défaut
    le problème se produit à l'éxecution

    j'ai testé également sur GNU/Linux le même code ne pose aucun problème.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    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 153
    Billets dans le blog
    4
    Par défaut
    Est-ce que la lib utiliserait ses propres allocateurs ou surcharge de new ? Du coup ton delete ne match pas le new utilisé en interne.
    C'est franchement pas trop comme interface qu'ils proposent là...
    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. mise en page (Header and Footer) en XML-XSL.
    Par christine dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 01/03/2004, 16h31
  2. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  3. [langage] expression reguliere motif répétitif dans 1 pattern
    Par comme de bien entendu dans le forum Langage
    Réponses: 11
    Dernier message: 09/04/2003, 16h14
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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