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

Visual C++ Discussion :

Crash du compilateur VC++ 2005 Express Edition


Sujet :

Visual C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Crash du compilateur VC++ 2005 Express Edition
    Salut !

    Je viens de me mettre à la programmation VC++ car j'avais des problèmes de manque de mémoire avec TC 3 sous dos...

    Je veux juste faire du C++ et tracer quelques malheureuses lignes, mais pas particulièrement de la programmation Windows. j'ai donc repris un projet démo avec le minimum graphique.
    En partant d'un projet de démo pour la librairie GDI+ que j'ai téléchargé je ne sais plus où, j'ai rajouté la fonction suivante :

    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
     
    void Gogogo() {
    	using namespace std;
    	class  Fourmis;
    	class  PtProp;
    	class  FourmisColony;
    	typedef pair<int,int>   Point;
    	typedef pair<Point,int> Node;
    	typedef pair <Point,PtProp> KeyAndVal ;
    	class  Fourmis {
    	public :
    		Point CurCoord;
    //		list <Node> BackNest;
    	};
    	class  PtProp {
    	public :
    		float Phrmn;
    		vector <Point> Next;
    	};
    	class  FourmisColony {
    	public :
    		Point  Location;
    		vector <Fourmis> Frm;
    		string Name;
    	};
    	const Point WorldMax (50,50) ;  
    	const int NbFourmis = 100;
    	map <Point,PtProp> WorldMap;
    	FourmisColony FrmClny;
     
    //la suite peut être mis en commentaire, ca ne change rien au problème
     
    	for (int x = 0; x != WorldMax.first ; x++) {
    		for (int y = 0; y != WorldMax.second ; y++) {
    			Point  TmpPoint (x,y);
    			PtProp TmpPtProp;
    			TmpPtProp.Phrmn = 0;
    			WorldMap.insert(KeyAndVal(TmpPoint,TmpPtProp));
    		}
    	}
    	for (int i = 0 ; i != NbFourmis ; i++) ;
    }
    Tel que c'est écrit là, le compilo ne plante pas.

    Par contre, si j'enlève le // devant "list <Node> BackNest;", cela suffit à le faire crasher.

    j'obtient une fenêtre de crash abituelle et le message suivant dans la fenêtre Output from Build :

    ------ Build started: Project: Starting GDIPlus, Configuration: Debug Win32 ------
    Compiling...
    Starting GDIPlusDlg.cpp
    e:\program files\microsoft visual studio 8\vc\include\xmemory(160) : fatal error C1001: An internal error has occurred in the compiler.
    (compiler file 'msc1.cpp', line 1392)
    To work around this problem, try simplifying or changing the program near the locations listed above.
    Please choose the Technical Support command on the Visual C++
    Help menu, or open the Technical Support help file for more information
    Build log was saved at "file://e:\Program Files\Microsoft Visual Studio\MyProjects\Starting GDIPlus\Debug\BuildLog.htm"
    Starting GDIPlus - 1 error(s), 0 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

    Au début j'ai cru que le compilateur ne supportait pas le type vector<list<pair<pair<int,int>,int>>>, mais chose étrange, j'ai essayé de créer un projet Win32 Console application, de simplement rajouter ma fonction Gogogo() ainsi que les 3 includes nécéssaires pour list, map et string, et là, le projet compile sans problème.

    J'ai joint le projet "Starting GDIplus" modifié afin que vous puissiez essayer de le compiler...

    Je n'ai rien trouvé dans la faq à ce sujet, alors si quelqu'un pouvait m'aider, ça serait complètement bien.

    PS : en fait le le .rar est trop gros, je l'ai upload ici : http://www.keepmyfile.com/download/ed0e47909467

    PS2 : Ah ya aussi un fichier BuildLog.Htm dans lequel on trouve :

    Build started: Project: Starting GDIPlus, Configuration: Debug|Win32
    Command Lines Creating temporary file "e:\Program Files\Microsoft Visual Studio\MyProjects\Starting GDIPlus\Debug\RSP00000623523680.rsp" with contents
    [
    /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_VC80_UPGRADE=0x0600" /D "_AFXDLL" /D "_MBCS" /Gm /EHsc /RTC1 /MDd /Yu"stdafx.h" /Fp".\Debug/Starting GDIPlus.pch" /Fo".\Debug/" /Fd".\Debug/" /W3 /c /ZI /TP ".\Starting GDIPlusDlg.cpp"
    ]
    Creating command line "cl.exe @"e:\Program Files\Microsoft Visual Studio\MyProjects\Starting GDIPlus\Debug\RSP00000623523680.rsp" /nologo /errorReport:prompt"

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Lorqu'on a une erreur interne du compilateur, il faut :

    - regarder si la ligne spécifiée ne contient pas d'erreur.
    - regarder si ce qui précède la ligne spécifiée ne contient pas d'erreur.
    - vérifier toutes les déclarations pouvant être en rapport, directement ou indirectement avec le problème.
    - même s'il n'y a pas d'erreur de syntaxe, réécrire le code de la façon la plus académique possible, en décomposant bien chaque opération (éviter les trucs du style fonction1 (fonction2 (a = b * 2 + (j = z))) ).
    - si l'erreur se situe dans ou en-dessous d'une longue fonction, essayer de la décomposer en plusieurs fonctions élémentaires plus courtes.
    - si on est en release, essayer de compiler en debug : si le problème ne se pose qu'en release, essayer différentes combinaisons d'options d'optimisations.
    - essayer de réécrire le code différemment.

    - et si tout ça ne résout pas le problème ... contacter M$
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  3. #3
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    ben, dites, je me trompe peut être, mais il me semble qu'on ne peut pas déclarer de classe dans une fonction, que le "using namespace" doit être hors fonction, et que tous ces amchins là ne doivent pas fiare partie d'une fonction. Ou alors j'ai tout faux...

    de plus, tu déclares les mebres des classes fourmi et autres, mais tu ne spécifie pas leur contenu

    néanmoins, que je me trompe ou non, ces manières de programmer pour le moins non conventionelles sont à proscrire.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    ben, dites, je me trompe peut être, mais il me semble qu'on ne peut pas déclarer de classe dans une fonction, que le "using namespace" doit être hors fonction, et que tous ces amchins là ne doivent pas fiare partie d'une fonction
    En fait tous ces machins là peuvent très bien faire partie d'une fonction. En revanche, les types locaux (toutes les classes déclarées dans Gogogo()) n'ont pas de linkage (ie ils ne sont visibles que dans le bloc où ils sont déclarés) et ne peuvent pas être paramètres d'un template.

    Ce qui m'étonne c'est que les trucs du genre vector<Fourmis> compilent sans erreur.

    Quoi qu'il en soit, je suis d'accord avec Antoine_935 : il serait préférable d'adopter un style de programmation plus classique.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Excusez-moi de n'avoir pas répondu je me suis absenté une semaine.
    Pourrait-on m'indiquer quelle est la façon conventionnelle de déclarer des classes (ie où ?)


    Lorqu'on a une erreur interne du compilateur, il faut :

    - regarder si la ligne spécifiée ne contient pas d'erreur.
    - regarder si ce qui précède la ligne spécifiée ne contient pas d'erreur.
    - vérifier toutes les déclarations pouvant être en rapport, directement ou indirectement avec le problème.
    Vu que ce code compile en version "Win32 Console Application", je ne crois pas qu'il y ait d'erreur dans ce bout de code.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    J'ai essayé de mettre mes définitions en tête du fichier .cpp après les #includes, et maintenant ça compile sans problème et sans crash!!

    Merci boromir73 et Antoine_935!

    Est-ce la méthode conventionnelle ?

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/01/2006, 19h56
  2. [Sql Server 2005 Express Edition] Comment lire journal ldf ?
    Par quanou dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 26/12/2005, 09h49
  3. [VB 2005 Express Edition Beta 2] Bugs et limites
    Par gb-ch dans le forum EDI/Outils
    Réponses: 9
    Dernier message: 20/12/2005, 10h32
  4. [Installation]SQL Server 2005 Express Edition sur XP home
    Par Médiat dans le forum MS SQL Server
    Réponses: 15
    Dernier message: 06/08/2005, 18h22

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