Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Les boutiques de Montgallet : piranha, seco Achat - Vente Divers : erico92 et 34 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Probleme en C

 
n°8652
probnet
Profil : Jeune recrue
Posté le 05-06-2004 à 20:23:18  profilanswer
 

Salut mon pote et moi on a creer un progrmme  lorsque on le compile ca nous marque aucune erreur mais quant on l'execute ca nous mais buse error
voici le programe
 
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define N 10
#define M 11
int T=2;
 
void inittab(int *** tab)
{
  int i,j;
  *tab = malloc(N * sizeof (*tab)[0]);
  assert(*tab);
  for(i=0;i < N;i++)
    {
      (*tab)[i] = malloc(N * sizeof (*tab)[0][0]);
      assert((*tab)[i]);
      for(j=0;j < M;j++)
 (*tab)[i][j] = N*i+j;
    }
}
 
void printtab(int ** tab)
{
  int i,j;
  printf("********************** Init Affichage ********************\n\n" );
  printf("F :Foret  C :Chateau  M :Montagne  $ :Personnage  O :Objet\n\n\n" );
  for(i=0;i < N;i++)
    {
      for(j=0;j < M;j++)
 {
   if((i == 0) || (i == 1))
     printf("%5c",70);
   else
     if((j == 0) || (j == 1))
       printf("%5c",77);
     else
       if((j == 9) || (j == 10))
  printf("%5c",67);
       else
  if((tab[i][j] == 22) || (tab[i][j] == 88))
    printf("%5c",79);
  else
    if(tab[i][j] == 65)
      printf("%5c",36);
    else
      printf("%5c",35);
 }
      printf("\n" );
    }
}
 
/* void freetab(int ** tab)
   {
   int i,j;
   for(i = (N - 1);i > 0;i--)
   {
   for(j = (M - 1);j > 0;j--)
   free(tab[i][j]);
   }
   free(tab);
   }
*/
void swapH(int ** tab)
{
  int i,j,tmp;
  printf("***** Action : Monter *****\n\n\n" );
  for(i = 0;i < N;i++)
    for(j = 0;j < M;j++)
      {
 if(tab[i][j] == 65)
   {
     if((i - 1) < 2)
       printf("Vous ne pouvez monter puisqu'il y a la Foret\n" );
     else  
       if((tab[i - 1][j] == 22) || (tab[i - 1][j] == 88))
  printf("Vous ne pouvez monter puisqu'il ya un objet qui vous gene\n" );
       else
  {
    tmp = tab[i][j];
    tab[i][j] = tab[i - 1][j];
    tab[i - 1][j] = tmp;
  }
   }
      }
}
 
void swapB(int ** tab)
{
  int i,j,tmp;
  printf("***** Action : Descendre *****\n\n\n" );
  for(i = (N - 1);i > 0;i--)
    for(j = (M - 1);j > 0;j--)
      {
 if(tab[i][j] == 65)
   {
     if((i + 1) > (N - 1))
       printf("Vous ne pouvez descendre sinon vous sortez de la MAP\n" );
     else
       if((tab[i + 1][j] == 22) || (tab[i + 1][j] == 88))
  printf("Vous ne pouvez descendre puisqu'il y a un objet qui vous gene\n" );
       else
  {
    tmp = tab[i][j];
    tab[i][j] = tab[i + 1][j];
    tab[i + 1][j] = tmp;
  }
   }
      }
}
 
void swapG(int ** tab)
{
  int i,j,tmp;
  printf("***** Action : Gauche *****\n\n\n" );
   for(i = 0;i < N;i++)
    for(j = 0;j < M;j++)
      {
 if(tab[i][j] == 65)
   {
     if((j - 1) < 2)
       printf("Vous ne pouvez aller vers la gauche puisqu'il y a la Montagne\n" );
     else
       if((tab[i][j - 1] == 22) || (tab[i][j - 1] == 88))
  printf("Vous ne pouvez aller vers la gauche puisqu'il y a un objet qui vous gene\n" );
       else
  {
    tmp = tab[i][j];
    tab[i][j] = tab[i][j - 1];
    tab[i][j - 1] = tmp;
  }
   }
      }
}
 
void swapD(int ** tab)
{
  int i,j,tmp;
  printf("***** Action : Droite *****\n\n\n" );
  for(i = (N - 1);i > 0;i--)
    for(j = (M - 1);j > 0;j--)
      {
 if(tab[i][j] == 65)
   {
     if((j + 1) > 8)
       printf("Vous ne pouvez aller vers la droite puisqu'il y a le Chateau\n" );
     else
       if((tab[i][j + 1] == 22) || (tab[i][j + 1] == 88))
  printf("Vous ne pouvez aller vers la droite puisqu'il y a un objet qui vous gene\n" );
       else
  {
    tmp = tab[i][j];
    tab[i][j] = tab[i][j + 1];
    tab[i][j + 1] = tmp;
  }
   }
      }
}
 
void take(int ** tab)
{
  int i,j;
  printf("***** Action : Prendre un Objet\n\n\n" );
  for(i = 0;i < N;i++)
    for(j = 0;j < M;j++)
      {
 if(tab[i][j] == 65)
   {
     if((tab[i - 1][j] == 22) || (tab[i - 1][j] == 88))
       {
  tab[i - 1][j]=-1;
  T=T - 1;
       }
     else
       if
  ((tab[i + 1][j] == 22) || (tab[i + 1][j] == 88))
  {
    tab[i + 1][j]=-1;
    T=T - 1;
  }
       else
  if((tab[i][j - 1] == 22) || (tab[i][j - 1] == 88))
    {
      tab[i][j - 1]=-1;
      T=T - 1;
    }
  else
    if((tab[i][j + 1] == 22) || (tab[i][j + 1] == 88))
      {
        tab[i][j + 1]=-1;
        T=T - 1;
      }
    else
      printf("Vous ne pouvez prendre d'objet puisqu'il y en a pas a proximite de vous\n" );
   }
      }
}
 
void poser(int ** tab)
{
  int i,j;
  char c,reste;
  printf("***** Action : Deposer un Objet\n\n\n" );
  for(i = 0;i < N;i++)
    for(j = 0;j < M;j++)
      {
 if(tab[i][j] == 65)
   {
     if(T == 2)
       {
  printf("Vous ne pouvez pas deposer un Objet puisque vous n'en avez pas pris\n" );
       }
     else
       {
  printf("cmd : " );
  reste = c = getchar();
  while(reste == '\n')
    {
      switch(c)
        {
        case 'h':
   tab[i -1][j] = 88;
   T=T + 1;
   break;
        case 'b':
   tab[i + 1][j] = 88;
   T=T + 1;
   break;
        case 'g':
   tab[i][j - 1] = 88;
   T=T + 1;
   break;
        case 'd':
   tab[i][j - 1] = 88;
   T=T + 1;
   break;
        default:
   printf("h : au-dessus -- b : en-dessous -- g: a gauche -- d : a droite\n" );
   break;
        }
      printf("cmd : " );
      reste = getchar();
    }
       }
   }
      }
}
 
int main(void)
  {
    char c,reste;
    int ** tab = NULL;
    inittab(&tab);
    while(1)
      {
 printtab(tab);
 printf("cmd : " );
 reste = c = getchar();
 while(reste != '\n')
   reste = getchar();
 switch(c)
   {
   case 'h':
     swapH(tab);
     break;
   case 'b':
     swapB(tab);
     break;
   case 'g':
     swapG(tab);
     break;
   case 'd':
     swapD(tab);
     break;
   case 't' :
     take(tab);
     break;
   case 'p':
     poser(tab);
     break;
   case 'm':
     printf("h : monter le curseur\n" );
     printf("b : descendre le curseur\n" );
     printf("g : deplacer le curseur vers la gauche\n" );
     printf("d : deplacer le curseur vers la droite\n" );
     printf("t : prendre -- p: poser un objet\n" );
     printf("m : afficher l'aide\n" );
     printf("q : quitter le programme\n\n" );
     break;
   case 'q':
     /*freetab(tab);*/
     exit(0);
   default:
     printf("La commande 'm' permet d'obtenir l'aide\n\n\n" );
     break;
   }
      }
    return 0;
  }
 
pouvez vous nous aider merci

n°8654
myst
nono powered ©
Profil : Vieux de la vieille
Posté le 05-06-2004 à 20:37:36  profilanswer
 

t'as essayé un petit mode debug pour voir à quelle ligne ca plante ? ;)
 
ca serait vachement pratique parce que je doute que les gens ici aient le temps de lire et comprendre ce pavé de code...


---------------
Fondateur de la CuRseD TeAm
n°8661
probnet
Profil : Jeune recrue
Posté le 05-06-2004 à 21:09:54  profilanswer
 

ben justement y pas d'erreur lors de la compilation
c'est lors de l'execution

n°8662
probnet
Profil : Jeune recrue
Posté le 05-06-2004 à 22:48:36  profilanswer
 

En fait on pense qu'il y aurait une erreur dans la fonction initab c'est celle la
 
void inittab(int *** tab)  
{  
  int i,j;  
  *tab = malloc(N * sizeof (*tab)[0]);  
  assert(*tab);  
  for(i=0;i < N;i++)  
    {  
      (*tab)[i] = malloc(N * sizeof (*tab)[0][0]);  
      assert((*tab)[i]);  
      for(j=0;j < M;j++)  
 (*tab)[i][j] = N*i+j;  
    }  
on a chercher dedans mais on n'a pas trouver, on pense que se serait un probleme de pointeur mai on en ait pas sur

n°8664
myst
nono powered ©
Profil : Vieux de la vieille
Posté le 05-06-2004 à 22:59:10  profilanswer
 

le mode debug c'est une phase de l'execution...


---------------
Fondateur de la CuRseD TeAm
n°8665
probnet
Profil : Jeune recrue
Posté le 05-06-2004 à 23:41:38  profilanswer
 

ben le blem c'est qu'on utilise linux et que sa marque a la fin
buse error

n°8666
Ryo-Ohki
namae nanka
Profil : Légende vivante
Posté le 06-06-2004 à 10:58:21  profilanswer
 

C'est dès le démarrage ou il tourne un peu avant de planter ?
 
Si tu veux pas passer par le mode debug, tu n'as qu'à utiliser le "debug du pauvre" -> tu places des printf aux points stratégiques de ton code pour voir si ils sont exécutés ou pas. Au moins tu sauras à peu près où ça plante. C'est pas propre mais c'est efficace.
 
Pour ton erreur, bah  :spamafote:  jamais vu ça. Peut-être le programme dit qu'il est une buse, je sais pas.  :D


Message édité par Ryo-Ohki le 06-06-2004 à 10:59:09

---------------
Hollow Cabbit of Caerbannog | Chacalapinours Légendaire | Grand Ermite en Chef  :o
In nomine Felis, et Insania, et Malikis Sancti Amen | Mon Blog Photo
n°8671
P-Y
Profil : Vieux de la vieille
Posté le 06-06-2004 à 16:01:02  profilanswer
 

Ryo-Ohki a écrit :

C'est dès le démarrage ou il tourne un peu avant de planter ?
 
Si tu veux pas passer par le mode debug, tu n'as qu'à utiliser le "debug du pauvre" -> tu places des printf aux points stratégiques de ton code pour voir si ils sont exécutés ou pas. Au moins tu sauras à peu près où ça plante. C'est pas propre mais c'est efficace.
 
Pour ton erreur, bah  :spamafote:  jamais vu ça. Peut-être le programme dit qu'il est une buse, je sais pas.  :D
 


"debug du pauvre", original comme nom :lol:. moi je dis simplement le debug_à_coups_de_printf, effectivement c'est très sale mais au moins, ca marche!
Sinon tu peux aussi utiliser electric fence, qui vérifie tout ce qui concerne la gestion de la mémoire, vu que un bus error ca doit venir d'un indice qui va trop loin ou un truc dans le genre.


Message édité par P-Y le 06-06-2004 à 16:01:13
n°8672
Ryo-Ohki
namae nanka
Profil : Légende vivante
Posté le 06-06-2004 à 16:08:35  profilanswer
 

Han, "bus error" fallait lire   :o
 
Alors oui, c'est un problème d'adressage mémoire (pointeur non initialisé où ne pointant pas là où il faut par exemple).


---------------
Hollow Cabbit of Caerbannog | Chacalapinours Légendaire | Grand Ermite en Chef  :o
In nomine Felis, et Insania, et Malikis Sancti Amen | Mon Blog Photo
n°8675
myst
nono powered ©
Profil : Vieux de la vieille
Posté le 06-06-2004 à 16:20:41  profilanswer
 

aaaaah moi non plus j'avais pas compris "bus"... je me disais, c'est quoi cette nouvelle erreur ?


---------------
Fondateur de la CuRseD TeAm
n°8676
P-Y
Profil : Vieux de la vieille
Posté le 06-06-2004 à 16:25:20  profilanswer
 

:wam: Non mais sérieusement vous aviez pas compris? :lol:
ok si ca avait été "triple buse error" :rofl:, mais la...

n°8678
Ryo-Ohki
namae nanka
Profil : Légende vivante
Posté le 06-06-2004 à 17:24:40  profilanswer
 

P-Y a écrit :

:wam: Non mais sérieusement vous aviez pas compris? :lol:


 
Bah nan. J'en étais à chercher des trucs genre "bUse" sous Google, sans rien trouver evidemment   :o
 
Moi je programme (programmais) proprement, j'ai jamais eu cette erreur  (juste qq petits "segmentation fault" de temps en temps...  :ange: )
 
Mais pas être fichu de recopier correctement "bus error" aussi..  :D  (je blague).


---------------
Hollow Cabbit of Caerbannog | Chacalapinours Légendaire | Grand Ermite en Chef  :o
In nomine Felis, et Insania, et Malikis Sancti Amen | Mon Blog Photo
n°9062
TotoWeb 93
M in M
Profil : Habitué
Posté le 13-06-2004 à 23:33:45  profilanswer
 

vous pouvez aussi mettre le flag -g3 lors de la compilation
comme ca vous lancer votre programme dans Gdb
et lorsqu'il plante, on saura ou ;)


Aller à :
Ajouter une réponse