Problème de programmation

Résolu/Fermé
panderan - Modifié par NHenry le 30/12/2015 à 22:05
 panderan - 31 déc. 2015 à 13:33
Bonjour,
Mon programme plante et je ne comprends pas pourquoi je n'arrive pas a faire mon affichage.

Voila, mon programme :

void    init_value(t_player_position *pos, t_wall_calc *wall)
{
  pos = malloc(sizeof(pos));
  wall = malloc(sizeof(wall));
  pos->dirx = -1;
  pos->diry = 0;
  pos->posx = 1;
  pos->posy = 1;
  pos->planex = 0;
  pos->planey = 0.66;
  wall->camerax = (2 / (double)(w)) - 1;
  wall->rayposx = pos->posx;
  wall->rayposy = pos->posy;
}

void                    calc_wall(char **map)
{
  t_player_position     pos;
  t_wall_calc           wall;
  int                   find;

  init_value(&pos, &wall);
  wall.raydirx = pos.dirx + pos.planex * wall.camerax;
  wall.raydiry = pos.diry + pos.planey * wall.camerax;
  wall.mapx = wall.rayposx;
  wall.mapy = wall.rayposy;
  wall.distwallx = sqrt(1 + (wall.raydiry * wall.raydiry) / (wall.raydirx * wall.raydirx));
  wall.distwally = sqrt(1 + (wall.raydirx * wall.raydirx) / (wall.raydiry * wall.raydiry));
  if (wall.raydirx < 0)
    {
      wall.etapex = - 1;
      wall.distwallx = (wall.rayposx - wall.mapx) * wall.distwallx;
    }
  else
    {
      wall.etapex = 1;
      wall.distwallx = (wall.mapx + 1 - wall.rayposx) * wall.distwallx;
    }
  if (wall.raydiry < 0)
    {
      wall.etapey = - 1;
      wall.distwally = (wall.mapy + 1 - wall.rayposy) * wall.distwally;
    }
  if (wall.raydiry < 0)
    {
      wall.etapey = - 1;
      wall.distwally = (wall.mapy + 1 - wall.rayposy) * wall.distwally;
    }
  else
    {
      wall.etapey = 1;
      wall.distwally = (wall.mapy + 1 - wall.rayposy) * wall.distwally;
    }
  find = 0;
  while (find == 0)
    {
      if (wall.distwallx < wall.distwally)
        {
          wall.distwallx = wall.distwallx + 1;
          wall.mapx = wall.mapx + wall.etapex;
          wall.wallhor = 0;
        }
      else
        {
          wall.distwally = wall.distwally + 1;
          wall.mapy = wall.mapy + wall.etapey;
          wall.wallhor = 0;
        }
      if (map[wall.mapx][wall.mapy] == 1) /* Erreur de segmentation */
          find = 1;
    }
  printf("Mur trouvé en : %d, %d", wall.mapx, wall.mapy);
}

Dans mon main je crée ma map de 10 par 10 avec des 0 ou des 1.
Apres, je fais juste appel a cette fonction.
Le problème est que j'ai un erreur de segmentation au niveau de mon dernier if.
Merci de votre aide



EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

1 réponse

Utilisateur anonyme
30 déc. 2015 à 21:35
Bonjour

Je n'ai pas lu très loin, mais :
pos = malloc(sizeof(pos));

Tu alloues une zone de la taille du pointeur. Or il te faut une zone de la taille de l'objet pointé :
pos = malloc(sizeof(* pos));

ou
pos = malloc(sizeof(t_player_position));


Même chose avec wall, bien sûr.

Il y a au moins ce problème, je ne dis rien pour le reste.
0
Ok merci.
Le problème est résolu.
J'essayerais de faire attention à ça la prochiane fois.
0