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++

  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.

  7. #7
    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
    sur Mac aussi �a fonctionne correctement, je n'ai ce probl�me que sur Windows.

  8. #8
    Membre �clair� Avatar de Suryavarman
    Homme Profil pro
    D�veloppeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : D�veloppeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par d�faut
    As tu essay� de changer l'ordre de d�s-allocation: genre en ordre FILO (Premier entr� dernier sortie)?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
        delete api;
        delete [] outText;
        pixDestroy(&image);
    Deviendrait:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
        pixDestroy(&image);
        delete [] outText;
        delete api;
    Autres tests possible:
    As tu le m�me soucis en Debug et Release?
    Sur Windows as tu essay� ce code avec un autre compilateur. Si oui as tu le m�me soucis?
    Peut �tre que sur Windows la lecture de l'image pose un soucis. Peut �tre que faire un api->SetImage(NULL) avant de lib�rer api devrait l'aider? (Je n'ai aucune id�e du comportement de SetImage :p)

    As tu essay� de tester l'image que pixRead te retourne?
    CHECK(image);

    H�site pas � farfouiller sur leur git. Ils ont des tests unitaires. �a t'aidera peut-�tre:
    https://github.com/tesseract-ocr/tes...arch?q=pixRead

  9. #9
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 048
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par d�faut
    Hello, c'est un probl�me basique de Runtime Windows (a.k.a MT, MTd, MD, MDd ).
    La DLL de Tesseract doit partager le m�me runtime que ton ex�cutable. (Si tu fais comme dans l'exemple )
    Avec le peu d'information que j'ai je dirais que Tesseract alloue avec new dans la DLL ( Dans son runtime ) et tu lib�res dans ton exe qui � son propre runtime.
    Dans ce cas, Windows te dis 'Je ne trouve pas l'allocation dans le tas'.

    V�rifies que ton ex�cutable � le m�me runtime que la DLL. Si tu n'as pas moyen de voir quel runtime utilise ta DLL tu as 2 solutions:
    1 - Test avec le runtime MD ( Partage de heap entre les binaires )
    2 - Tesseract doit fournir une fonction pour delete dans la DLL l'allocation qu'il a faite.

    PS: Ca marche sous Linux et Mac, car par d�faut les heaps sont partag�s. Sous Windows c'est un choix � faire.

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