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 :

Programme C++ fonctionne sur Mac,PC mais pas Ubuntu?


Sujet :

C++

Vue hybride

isyldur Programme C++ fonctionne sur... 13/01/2010, 01h53
Klaim Salut! L'erreur au... 13/01/2010, 03h18
isyldur Comme erreur à l'execution... 13/01/2010, 03h56
Klaim Pour une raison que je n'ai... 13/01/2010, 15h14
cboudy tu peux essayer de lancer le... 14/01/2010, 10h09
Fabllot Bonjour, Pour être habitué... 14/01/2010, 14h49
isyldur Je veux bien croire que je ... 14/01/2010, 19h56
Fabllot En regardant rapidement tes... 15/01/2010, 10h46
isyldur Je me suis posé la question... 15/01/2010, 11h02
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Par défaut Programme C++ fonctionne sur Mac,PC mais pas Ubuntu?
    Voila j'apprends le C++ depuis peu, j'ai écrit ce "petit" programme pour résoudre une grille de sudoku. Il fonctionne très bien sur mon Mac mini G4( compile avec g++ 4.01), et sur les pc de la fac sous windows (P4 sous XP compile avec visual studio), mais sur ces mêmes PC ,sous Ubuntu en compilant encore avec g++ (je sais plus la version) le programme ne donne pas le bon nombre de résultats et plante . Quelle erreur ai-je bien pu faire qui soit spécifique juste a un compilateur donné? ou bien est-ce les autres compilateurs qui sont plus laxistes?

    code en pièce jointe



    Edit Resolu : L'erreur venait de la fonction qui renvoyait une reference vers une case, Avec un pointeur à la place ça marche mieux.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Salut!

    L'erreur au plantage ainsi que la description des valeurs érronées nous aideraient à t'aider.

    En l'occurence ton programme ne compile pas chez moi.
    D'abord tu as mis des "using namespace std;" partout même là ou il n'y a pas d'espace de nom déclaré, aussi ça ne compile pas (Visual Studio 2008 -- vc9 )
    Va voir dans la faq a propos de using namespace, il ne faut pas l'utiliser comme tu l'as fait.

    J'ai aussi eu un problème bizarre de point d'entrée du programme non trouvé... j'ai forcé main dans le projet pour l'instant.

    Quand je lance le projet en debug ça crash avec une access violation, tu essais d'utiliser le tableau argv des paramettres de ligne de commande même si il est null...

    Il faudrait aussi que tu donnes les paramettres de test voir ton cas d'utilisation. Avec quel compilateur/version de VS avais-tu compilé ton projet? Est-ce que tu as les .sln et .proj pour tester plus efficacement?

    Sinon, de loin je dirais que le problème a plus de chance de venir des manipulations que tu fais dans ton code que d'un problème de configuration. Il se peut que tu n'ai pas vu les problèmes a l'execution sur les autres plateformes parceque tu as utilisé une vieille version de compilateurs? A vérifier.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Par défaut
    Comme erreur à l'execution j'ai une erreur de segmentation, apparemment au moment de l'appel à la fonction grid::show(). Et j'ai l'impression que certaines affectations ne se font pas correctement. Cela UNIQUEMENT sur ubuntu.

    Effectivement les using namespace ne sont pas indispensables partout, j'en avais supprime certains pour la compilation sous windows. Ils ne genent pas gcc.

    parametres de test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0 0 1 0 0 4 0 0 0 0 0 0 0 6 0 3 0 5 0 0 0 9 0 0 0 0 0 8 0 0 0 0 0 7 0 3 0 0 0 0 0 0 0 2 8 5 0 0 0 7 0 6 0 0 3 0 0 0 8 0 0 0 6 0 0 9 2 0 0 0 0 0 0 4 0 0 0 1 0 0 0
    on doit trouver 1 solution unique :
    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
     
    1
    calcul effectue en 1.52 secondes
    8875 branches parcourues
    1 solution(s) trouvee(s)
    solution numero 1
    +---+---+---+---+---+---+---+---+---+
    | 7 | 6 | 1 | 3 | 5 | 4 | 2 | 8 | 9 | 
    +---+---+---+---+---+---+---+---+---+
    | 2 | 9 | 8 | 1 | 6 | 7 | 3 | 4 | 5 | 
    +---+---+---+---+---+---+---+---+---+
    | 4 | 5 | 3 | 9 | 2 | 8 | 1 | 6 | 7 | 
    +---+---+---+---+---+---+---+---+---+
    | 8 | 1 | 2 | 6 | 4 | 9 | 7 | 5 | 3 | 
    +---+---+---+---+---+---+---+---+---+
    | 9 | 7 | 6 | 5 | 1 | 3 | 4 | 2 | 8 | 
    +---+---+---+---+---+---+---+---+---+
    | 5 | 3 | 4 | 8 | 7 | 2 | 6 | 9 | 1 | 
    +---+---+---+---+---+---+---+---+---+
    | 3 | 2 | 7 | 4 | 8 | 5 | 9 | 1 | 6 | 
    +---+---+---+---+---+---+---+---+---+
    | 1 | 8 | 9 | 2 | 3 | 6 | 5 | 7 | 4 | 
    +---+---+---+---+---+---+---+---+---+
    | 6 | 4 | 5 | 7 | 9 | 1 | 8 | 3 | 2 | 
    +---+---+---+---+---+---+---+---+---+
    pour l'histoire de tableau non-initialisé ça m'étonne, le programme est sensé quitter si le nombre d'arguments est trop faible pour renseigner toutes les valeurs ( premier if du main), ou alors c'est qu'il considere le return 0; comme une erreur... j'ai eu ce meme probleme a la fin du main et remplace par exit(0);

    pour les fichier spécifiques a windows et la version exacte de visual faudra atttendre jeudi que je retourne a la fac.

  4. #4
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Pour une raison que je n'ai pas eu le temps de déterminer le nombre d'argumetns était érroné (valeur aléatoire je présume) mais je regarderai en rentrant du boulot voir si yavait une raison particulière.

  5. #5
    Membre chevronné Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 407
    Par défaut
    tu peux essayer de lancer le programme avec valgrind pour voir s'il détecte des fuites mémoire

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Bonjour,
    Citation Envoyé par isyldur Voir le message
    ou bien est-ce les autres compilateurs qui sont plus laxistes?
    Pour être habitué des programmes multiplateformes, oui les compilateurs ne sont pas tous aussi laxistes les uns que les autres et très souvent ils le sont de manières différentes...
    Après les systèmes fonctionnent aussi différemment. Pour ton cas, je n'ai pas testé le code, mais je parierais sur un problème mémoire, comme un dépassement de tableau par exemple... Mac OS & Windows peuvent gérer le dépassement sans planter mais dans un autre contexte, ce même dépassement va faire crasher l'application...

    Vérifie donc bien toutes tes allocations de mémoires, tes tableaux entre autre, et regarde bien qu'ils ne dépassent pas leurs tailles allouées...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Par défaut
    Citation Envoyé par Fabllot Voir le message
    Bonjour,

    Pour être habitué des programmes multiplateformes, oui les compilateurs ne sont pas tous aussi laxistes les uns que les autres et très souvent ils le sont de manières différentes...
    Après les systèmes fonctionnent aussi différemment. Pour ton cas, je n'ai pas testé le code, mais je parierais sur un problème mémoire, comme un dépassement de tableau par exemple... Mac OS & Windows peuvent gérer le dépassement sans planter mais dans un autre contexte, ce même dépassement va faire crasher l'application...

    Vérifie donc bien toutes tes allocations de mémoires, tes tableaux entre autre, et regarde bien qu'ils ne dépassent pas leurs tailles allouées...
    Je veux bien croire que je puisse avoir une erreur d'indice en lecture ou en écriture, pour ce qui est de l'allocation il n'y en a aucune de dynamique dans mon programme a part celle induites par le fonctionnement de la classe std::vector (qui stocke les résultats valides);

    Merci a tous pour vos réponses je vais voir si je trouve quelque chose avec les outils que vous m'avez suggérés.

    edit : pour valgrind c'est pas possible, version trop ancienne de mac os X.

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    En regardant rapidement tes sources, je maintiens mon idée première de dépassement de tableau quelque part...

    Je ne remets pas en cause ton algorithme, mais tes calculs d'indices lors des accès à tes matrices sont assez complexes... Es-tu vraiment certain qu'à chacun des accès des indices sont compris entre 0 et 8 (inclus) ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Par défaut
    Je me suis posé la question mais je suis a peu près sur que oui ( j'ai rajouté une parenthèse qui pouvait manquer).

    Par contre j'ai modifié la fonction Case& grid::Grille(int,int) pour qu'elle renvoie directement une Case et non une référence, et depuis je n'ai plus d'erreur de segmentation après un return dans le main.

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Citation Envoyé par isyldur Voir le message
    Je me suis posé la question mais je suis a peu près sur que oui ( j'ai rajouté une parenthèse qui pouvait manquer).
    Une bonne façon de vérifier est de mettre un assert ou une trace juste avant pour être sur de tes indices.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonctionne sur l’émulateur mais pas sur tablette
    Par devbot dans le forum Android
    Réponses: 2
    Dernier message: 04/12/2011, 20h53
  2. Réponses: 0
    Dernier message: 24/06/2010, 15h10
  3. Réponses: 1
    Dernier message: 11/11/2009, 12h35
  4. Réponses: 0
    Dernier message: 03/04/2008, 15h14
  5. Programme VB6 fonctionne en XP SP1, mais pas en SP2
    Par domb_st dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 11/08/2006, 21h16

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