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++/CLI Discussion :

[.Net][PB Runtime error] - AccessViolationException intempestive


Sujet :

C++/CLI

  1. #1
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Mars 2006
    Messages
    15
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par d�faut [.Net][PB Runtime error] - AccessViolationException intempestive
    Bonjours tout le monde ... voila encore un sujet pour reclamer votre aide !! (d�cid�ment le c++ manag� c'est pas mon fort)

    Voila, je r�alise actuellement un TP de compilation pour la fac. J'ai choisi VC++, mais j'arrete pas de me confronter avec des soucis, etant habitu� a du c++ classique.

    Voila mon soucis: j'ai une exception qui est lanc�e intempestivement ... et pas moyen de savoir d'ou �a vient (humm je sais pas trop comment utiliser le d�bogeur VS). Elle se produit alors que j'accede a un de mes 2 tableau a 2 dimensions.

    a premiere vue, on pourrait croire qu'il s'agit d'un it�rateur mal g�r� ... sauf qu'en fonction des parametre que je passe a mon constructeur, �a passe ou pas. (par exemple �a peut marcher avec une taille de 2, et 3 �a pine ... a s'arracher les cheveux)
    je commence a penser que je maitrise pas les initialisation avec les objets manag� ... si vous pouviez m'�clairer, voici le code (je ne met que les donn�es membres, le constructeur et la fonction afficher qui lance l'erreur sinon c'est trop long):

    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
    public class tableLalr
    {
        protected:
     
            action ** tableTerm;
            int **  tableNonTerm;
            int nb_symbolesT,nb_symbolesNT, nb_etats;
            gcroot <Hashtable ^> hashSymbT;
            gcroot <Hashtable ^> hashSymbNT;
     
    public: tableLalr(int nb_etat, array<System::String ^> ^symboleT, array<System::String ^> ^symboleNT)
            {
                //init tailles
                this->nb_etats = nb_etat;
                this->nb_symbolesT =  symboleT->Length;
                this->nb_symbolesNT = symboleNT->Length; ///nb_symboleNT;
                //init du tableau des terminaux(pas trouvé mieux ...)
                this->tableTerm = new action *[this->nb_etats];
                for(int i=0;i<this->nb_symbolesT;i++)
                {
                    tableTerm[i]=new action[this->nb_symbolesT];
                } 
     
                //init du tableau des non terminaux
                this->tableNonTerm = new int * [this->nb_etats];
                for(int i=0;i<this->nb_symbolesNT;i++)
                {
                    this->tableNonTerm[i] = new int[this->nb_symbolesNT];
     
                }
     
                // init des deux hashtables
                this->hashSymbT = gcnew System::Collections::Hashtable();
                this->hashSymbNT = gcnew System::Collections::Hashtable();
     
     
                for(int i=0;i<this->nb_symbolesT;i++){this->hashSymbT->Add(symboleT[i], i);    }
                for(int i=0;i<this->nb_symbolesNT;i++){this->hashSymbNT->Add(symboleNT[i], i);}
            }//constructeur
    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
    51
    52
    53
    54
    public: void afficher()
            {
     
                Console::WriteLine("======= Table LALR ======= ");
                IDictionaryEnumerator ^a = this->hashSymbT->GetEnumerator();
                Console::Write("           ");
                while(a->MoveNext())
                {
                    Console::Write("["+a->Key+"]");
                }
     
                Console::WriteLine();
     
                //Console::WriteLine(this->hashSymbT->GetEnumerator()->);
                //Terminaux
                for(int i = 0; i<this->nb_etats; i++)
                {
                    Console::Write("Etat("+i+") -> ");
                    for(int j = 0; j<(this->nb_symbolesT); j++)
                    {
                        Console::Write("["); 
                        if(!(this->tableTerm[i][j].isNull())){Console::Write(this->tableTerm[i][j].ToString());}
                        else{Console::Write("-"); }
                        Console::Write("]");    
                    }
                    Console::WriteLine();
                }
     
                Console::WriteLine("==> Symboles Non terminaux");
                //Non terminaux
                a = this->hashSymbNT->GetEnumerator();
                Console::Write("           ");
                while(a->MoveNext())
                {
                    Console::Write("["+a->Key+"]");
                }
     
                Console::WriteLine();
     
                for(int i = 0; i<(this->nb_etats); i++)
                {
                    Console::Write("Etat("+i+") -> ");
                    for(int j = 0; j<(this->nb_symbolesNT); j++)
                    {
                        //Console::WriteLine("aaa "+j);
                        Console::Write("["); 
                        if(this->tableNonTerm[i][j].Equals(NULL)){Console::Write(this->tableNonTerm[i][j].ToString());}
                        else{Console::Write("-"); }
                        Console::Write("]");    
                    }
                    Console::WriteLine();
                }
     
            }
    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
    int main(void) 
    {
     
     
    action *a,*c, *d;
    a = new action();
    c = new action();
    d = new action(1,"$","d",3);
     
    array<String^> ^t1 = {"a", "b", "c", "d", "e"};
    array<String^> ^t2 = {"x","y"};
    /* param : int nombre d'etat, tableau de string de symbole terminaux, tableau de string de symbole non terminaux*/
    tableLalr *b = new tableLalr(3,t1,t2);
    b->afficher();
     
      return 0;
    }
    et voila l'erreur ==>

    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
    ======= Table LALR =======
               [a][b][c][d][e]
    Etat(0) -> [-][-][-][-][-]
    Etat(1) -> [-][-][-][-][-]
    Etat(2) -> [-][-][-][-][-]
    ==> Symboles Non terminaux
               [x][y]
    Etat(0) -> [-][-]
    Etat(1) -> [-][-]
    Etat(2) -> [
    Unhandled Exception: System.AccessViolationException: Attempted to read or write
     protected memory. This is often an indication that other memory is corrupt.
       at tableLalr.afficher(tableLalr* )
       at main()
    Appuyez sur une touche pour continuer...
    et si je change l'appel du constructeur en mettant 2 etat au lieu de 3:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    tableLalr *b = new tableLalr(2,t1,t2);
    eh bien �a marche nickel ....
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ======= Table LALR =======
               [a][b][c][d][e]
    Etat(0) -> [-][-][-][-][-]
    Etat(1) -> [-][-][-][-][-]
    ==> Symboles Non terminaux
               [x][y]
    Etat(0) -> [-][-]
    Etat(1) -> [-][-]
    Appuyez sur une touche pour continuer...
    voila a n'y rien comprendre !!! pour quoi �a marcherais avec 2 etats et pas 3 ??? et en plus c'est variable .. hier �a marchais avec 1, 3, 4 ... etat et pas 2 !!! c'est a n'y rien comprendre ...
    j'ai le sentiment qu'il y a une subtilit� pour les initialisation que je ne maitrise pas ...
    (ps: au passage... intellisense a tendence a bugger par moment chez moi... �a ralenti et je n'ai plus le curseur, apparament il s'agirait d'un probleme vis a vis de l'initialisation des tableau qu'il faudrai faire d'une maniere pr�cise pour que �a marche bien ... si qqun peut m'eclaire sur ce point la ausii merci d'avance)
    (ps2: si vous avez des tips a me donner meme sur le code n'hesitez pas merci !!!)

    pour info je suis sous VisualStudio 2005 e si vous avez la moindre question n'hesitez pas a me contacter sur msn ou skype (cf mon profil)

    en vous remerciant d'avance

  2. #2
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    je te conseille d'essayer de debbugger pas � pas, tu mets un point d'arrets au d�but de ton code (F9), et tu navigues petit � petit avec la touche
    F11 dans les appels des fonctions.

  3. #3
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Mars 2006
    Messages
    15
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par d�faut
    this->tableNonTerm CXX0017: Error: symbol "this" not found
    le fichier concern� est:
    crtexe.c

    comment interp�ter �a ?
    �tant donn� que tableNonTerm est une variable membre de ma classe comment se fait t'il que "this" ne soit pas connu ?

  4. #4
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    pourquoi un .c et pas un .cpp ?

    (nb : this n'est adapt� que si la partie de ton code est dans la classe)

  5. #5
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Mars 2006
    Messages
    15
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par d�faut
    Citation Envoy� par nico-pyright(c)
    pourquoi un .c et pas un .cpp ?
    si je le savais :-)

  6. #6
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Mars 2006
    Messages
    15
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par d�faut
    au debug une fleche verte pointe sur la derniere intruction de cette macro du fichier crtexe.c ...

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    #else  /* WPRFLAG */
                __initenv = envp;
                mainret = main(argc, argv, envp);

  7. #7
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    et si tu remontes la pile d'appel ?

  8. #8
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Mars 2006
    Messages
    15
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par d�faut
    Citation Envoy� par nico-pyright(c)
    et si tu remontes la pile d'appel ?
    voila la pile d'appel
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    [External Code]	
    >	TP Compil - F2.exe!__tmainCRTStartup()  Line 586 + 0x19 bytes	C
     	TP Compil - F2.exe!mainCRTStartup()  Line 403	C
    et si je clicke sur le dernier element le la pile(TP Compil - F2.exe!mainCRTStartup() Line 403 C) j'obtiens �a .. toujours la fleche a la fin et dans le fichier crtexe.c
    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
     
    #ifdef WPRFLAG
    int wmainCRTStartup(
    #else  /* WPRFLAG */
    int mainCRTStartup(
    #endif  /* WPRFLAG */
     
    #endif  /* _WINMAIN_ */
            void
            )
    {
            /*
             * The /GS security cookie must be initialized before any exception
             * handling targetting the current image is registered.  No function
             * using exception handling can be called in the current image until
             * after __security_init_cookie has been called.
             */
            __security_init_cookie();
     
            return __tmainCRTStartup();
    }

  9. #9
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Mars 2006
    Messages
    15
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Par d�faut
    bon on va dire que c'est r�solu ... enfin non ya encore une heure j'avais toujours le meme bug ... et depuis les plus acharn� geek de ma classe ont jett� un oeil dessus sans pouvoir m'aider... snif (que de temps perdu !)


    en fait j'ai tout repris depuis le d�but (ya une heure donc) en me mettant 100% dans du c++/cli (les classes avec "ref" youpi) puis en utilisant les objets crosoft :-) a la poubelle les "gcroot<....>" !

    je sais pas si �a va m'aider ... mais au moins j'aurais appris quelquechose d'utile avec ce TP de compil (c'est pas la compil :-))

    d'ailleurs ta FAQ est nickel Nico .. merci beaucoup

    et je promet que je serais fidele au c++ cli si j'arrive a finir ce tp avant la soutenance, c''est a dire demain :-) (ah ou� faut faire un rapport aussi :-( )

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Runtime error avec UDF/DLL
    Par pram dans le forum SQL
    R�ponses: 6
    Dernier message: 22/04/2005, 10h30
  2. [LG]Runtime Error lors d'une recherche dans un fichier
    Par Fraynor dans le forum Langage
    R�ponses: 2
    Dernier message: 15/03/2005, 22h51
  3. [TP]Runtime error 106 à l'exécution
    Par BlackTiger dans le forum Turbo Pascal
    R�ponses: 2
    Dernier message: 25/01/2004, 21h50
  4. [LG]runtime error 202
    Par picsou123 dans le forum Langage
    R�ponses: 2
    Dernier message: 14/11/2003, 22h53
  5. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    R�ponses: 2
    Dernier message: 23/03/2002, 11h51

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