Problème de programmation
Résolu
panderan
-
panderan -
panderan -
Bonjour,
Mon programme plante et je ne comprends pas pourquoi je n'arrive pas a faire mon affichage.
Voila, mon programme :
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
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:
- Problème de programmation
- Application de programmation - Guide
- Fermer un programme de force - Guide
- Télécharger le programme de pmu - Télécharger - Médias et Actualité
- Programmation carte à puce vierge ✓ - Forum Matériel & Système
- Comment lancer un programme automatiquement au démarrage de windows - Guide
1 réponse
Bonjour
Je n'ai pas lu très loin, mais :
Tu alloues une zone de la taille du pointeur. Or il te faut une zone de la taille de l'objet pointé :
ou
Même chose avec wall, bien sûr.
Il y a au moins ce problème, je ne dis rien pour le reste.
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.
Le problème est résolu.
J'essayerais de faire attention à ça la prochiane fois.