CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Fonction debugger devc++

N_Cortex
N_Cortex
Niveau 7
07 septembre 2005 à 18:34:20

Mon programme plante ainsi "Programme a généré des erreurs et sera fermé par windows ect..." DOnc je me suis dit, je vais tester la fonction debuger de dev c++... Et je teste la fonction, et ça me rend ça :

WARNING
Une violation d´accès (erreur de segmentation) est apparue dans votre programme

Voila...

Mais ça veut dire quoi ça ? Qu´est-ce qui fait planter mon programme ?

godrik
godrik
Niveau 30
07 septembre 2005 à 18:45:43

bon, kesaco une segmentation fault.
Ca veut dire que tu accede a une adresse memoire (en lecture par exemple) pour laquel tu n´as pas le droit d´y lire.

La plupart du temps cela vient d´un depassement de tableau, d´un objet detruit mais toujours referencé, ou d´un access sur un pointeur non initialisé.

a mon avis ton debugeur doit pouvoir te dire quel fonction a provoqué cette seg fault.
regarde en amont si tu ne trouve pas une erreur.

Vengeur41
Vengeur41
Niveau 10
07 septembre 2005 à 18:47:00

Erreur de chargement de SDL_Surface* à tout hasard ?

N_Cortex
N_Cortex
Niveau 7
07 septembre 2005 à 18:47:25

Ok je vais regarder.

Merci !!

N_Cortex
N_Cortex
Niveau 7
07 septembre 2005 à 18:53:41

Le truc étrange c´est que dans les fonctions appelées, c´est vide...

Je suppose que le main n´est pas considérer comme une fonction ?
Mais le premier truc qui se passe, c´est un init_sdl(); dans le main, donc ça se passe avant, non ? Voir peut etre en extérieur du main ?

Vengeur41
Vengeur41
Niveau 10
07 septembre 2005 à 18:54:15

Met des printf partout... Tu verra ou ca plantera...

Vengeur41
Vengeur41
Niveau 10
07 septembre 2005 à 18:55:49

Plus tes projets seront gros plus t´en rencontrera (de segfault) au fait...

N_Cortex
N_Cortex
Niveau 7
07 septembre 2005 à 19:00:21

Pour l´insntant, c´est le meme projet que la dernière fois, sauf que j´y ai rajouter la gestion des clics de souris.

Le seul truc, c´est que printf est inutile, puisque le sdl ne se lance meme pas... Ca plante au démarage du programme !!

Lapintade
Lapintade
Niveau 30
07 septembre 2005 à 19:15:16

Y a jamais rien d´etrange, tout a toujours une explication.

Pour voir ou ca plante, utilise le debugger et trace pas a pas le code pour trouver l´endroit.

N_Cortex
N_Cortex
Niveau 7
07 septembre 2005 à 19:18:36

Ca fonctionne comment le pas a pas ?

Lapintade
Lapintade
Niveau 30
07 septembre 2005 à 20:36:41

Tu mets un point d´arret au debut de ton code ("Breakpoint") et tu lance. Le programme doit s´arretter sur ton point d´arret, te permettant dans ton editeur de voir l´etat des variables, de la memoire, etc ... Ensuite tu peux avancer ligne par ligne dans ton programme ("pas a pas").

JYY avait fait un beau message ou une belle page la dessus. Je souviens plus ou c´est.

dnob700
dnob700
Niveau 10
07 septembre 2005 à 22:44:00

sous windows, gcc (donc Dev C++) gère très mal la pile des programmes : si tu alloue en statique (dans le code et non pas avec un new que ce soit au niveau global ou au niveau d´une fonction) un gros tableau tu aura immenquablement un seg-fault au lancement du programme ou à l´entrée dans la fonction (si c´est main, c´est avant que du code soit exécuté).

Ca peut donc venir de là.

vsl5
vsl5
Niveau 8
08 septembre 2005 à 07:19:35

Pour le debugger de dev-c++ voici un pt´it lien :
http://www.dil.univ-mrs.fr/~garreta/generique/autres/UtiliserDevCpp.html#Debogage

JeanYvesYves
JeanYvesYves
Niveau 10
08 septembre 2005 à 13:16:19
N_Cortex
N_Cortex
Niveau 7
08 septembre 2005 à 17:30:33

Oulaaaaaaa...

Quand je met le curseur sur :
-->int main(int argc ,char **argv)<--
{
Et que je fasse "executer jusqu´au curseur"
Il me met le meme bug...

DOnc ça doit venir d´ou ?

godrik
godrik
Niveau 30
08 septembre 2005 à 17:43:14

N_cortex:
wall ton code, je regarde ca si j´ai 5 minutes.

N_Cortex
N_Cortex
Niveau 7
08 septembre 2005 à 19:45:17
  1. include <SDL/SDL.h>

SDL_Surface* screen;
SDL_Event event;
char key[400];
int xsouris=0,ysouris=0,xrelsouris=0,yrelsouris=0;
int Bmouse(int b);
char boutons[3]={0,0,0};

//toutes les structures des objets
struct joueur
{
int armed;
int score;
int vies;
};

struct balle
{
int x;
int y;
int v;
bool in;
};

struct vaisseau_spatial
{
int x;
int y;
int anim;
bool in;
};

struct briques
{
int x;
int y;
bool in;
};

struct missiles
{
int x;
int y;
bool in;
int dirx;
};

//initialisation de sdl + updates events ect (merci JYY ^^)
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(800, 600, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(0);
}

int Bmouse(int b)
{
int res;
if (b<0 ||b>2)
return 0;
res=boutons[b+1];
return res;
}

void UpdateEvents()
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
key[event.key.keysym.sym]=1;
break;
case SDL_KEYUP:
key[event.key.keysym.sym]=0;
break;
case SDL_MOUSEMOTION:
xsouris=event.motion.x;
ysouris=event.motion.y;
xrelsouris=event.motion.xrel;
yrelsouris=event.motion.yrel;
break;
}
}
}

SDL_Rect Rect(int x,int y,int w=0,int h=0)
{
SDL_Rect r;
r.x=x;
r.y=y;
r.w=w;
r.h=h;
return r;
}

void Blit(SDL_Surface* source, SDL_Surface* dest, int X, int Y)
{
SDL_Rect R;
R.x = X;
R.y = Y;
R.w=R.h=0;
SDL_BlitSurface(source,NULL,dest,&R);
}

SDL_Surface* LoadBMP(char* fichier,int vram=1)
{
SDL_Surface* f = SDL_LoadBMP(fichier);
SDL_Surface* r=NULL;
if (vram)
r=SDL_CreateRGBSurface(SDL_HWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);
if (r==NULL) vram=0;
if (!vram)
r=SDL_CreateRGBSurface(SDL_SWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);
SDL_Rect R=Rect(0,0,f->w,f->h);
SDL_BlitSurface(f,NULL,r,&R);
SDL_FreeSurface(f);
return r;
}

int main(int argc ,char **argv)
{
//déclaration des variables + structures
int s=1, pos_x=20, pos_y=0, i=0, start=0;
int sx4=0,sy4=0;

init_SDL();
//structures
struct balle ball;
ball.x = 100;
ball.y = 300;
ball.v = 10;
ball.in = true;
struct missiles missile;
missile.x = 0;
missile.y = 0;
missile.in = false;
struct vaisseau_spatial vaisseau;
vaisseau.x = 0;
vaisseau.y = 590;
vaisseau.in = true;
vaisseau.anim = 1;
struct joueur p;
p.armed = 0;
p.score = 0;
p.vies = 3;
struct briques briks[297];
for (i=0; i<296; i++)
{
briks[i].x = pos_x;
briks[i].y = pos_y;
briks[i].in = true;
pos_x = pos_x + 20;
if (pos_x >= 760) {pos_y += 10;pos_x = 20;}
}

//création des surfaces
SDL_Surface* firstscreen;
SDL_Surface* img_balle;
SDL_Surface* img_vaisseau;
SDL_Surface* img_vaisseaug;
SDL_Surface* img_vaisseaud;
SDL_Surface* img_vaisseaug2;
SDL_Surface* img_vaisseaud2;
SDL_Surface* img_brique;
SDL_Surface* img_missile;
SDL_Surface* img_fumee;
int fini=0;

//creation des objets + transparence

firstscreen=LoadBMP("images/backgrounds/font_etoil
es.bmp");
img_balle=LoadBMP("images/objects/balle.bmp");

img_vaisseau=LoadBMP("images/objects/vaisseau.bmp"
);

img_vaisseaug=LoadBMP("images/objects/vaisseau-g.b
mp");

img_vaisseaud=LoadBMP("images/objects/vaisseau-d.b
mp");

img_vaisseaug2=LoadBMP("images/objects/vaisseau-g2
.bmp");

img_vaisseaud2=LoadBMP("images/objects/vaisseau-d2
.bmp");

img_brique=LoadBMP("images/objects/brique_bleu.bmp
");

img_missile=LoadBMP("images/objects/missile.bmp");

img_fumee=LoadBMP("images/objects/fumee.bmp");
SDL_SetColorKey(img_balle,SDL_SRCCOLORKEY ,SDL_MapRGBA(img_balle->format,255,0,255,0));
SDL_SetColorKey(img_vaisseau,SDL_SRCCOLORKEY ,SDL_MapRGBA(img_vaisseau->format,255,0,255,0));
SDL_SetColorKey(img_vaisseaug,SDL_SRCCOLORKEY
,SDL_MapRGBA(img_vaisseaug->format,255,0,255,0));

SDL_SetColorKey(img_vaisseaud,SDL_SRCCOLORKEY
,SDL_MapRGBA(img_vaisseaud->format,255,0,255,0));

SDL_SetColorKey(img_vaisseaug2,SDL_SRCCOLORKEY
,SDL_MapRGBA(img_vaisseaug2->format,255,0,255,0));

SDL_SetColorKey(img_vaisseaud2,SDL_SRCCOLORKEY
,SDL_MapRGBA(img_vaisseaud2->format,255,0,255,0));

SDL_SetColorKey(img_brique,SDL_SRCCOLORKEY ,SDL_MapRGBA(img_brique->format,255,0,255,0));
SDL_SetColorKey(img_missile,SDL_SRCCOLORKEY ,SDL_MapRGBA(img_missile->format,255,0,255,0));
SDL_SetColorKey(img_fumee,SDL_SRCCOLORKEY ,SDL_MapRGBA(img_fumee->format,255,0,255,0));
while(1) //boucle principale
{

UpdateEvents(); //recherche d´events, et quitte si echap ou lance la balle si return
if (key[SDLK_RETURN] && start == 0) {sy4 = -1; sx4 = 1; start = 1;}
if (key[SDLK_ESCAPE]) break;
if (Bmouse(2))
{
if (p.armed != 0)
{
switch(p.armed)
{
case 1:
missile.dirx = xsouris;
missile.in = true;
break;
}
}
}

if (xrelsouris > 0) vaisseau.anim = 0;
if (xrelsouris == 0) vaisseau.anim = 1;
if(xrelsouris < 0) vaisseau.anim = 2;

//mouvements de la balle
ball.x+=ball.v*sx4;
ball.y+=ball.v*sy4;

// mouvements du vaisseau
vaisseau.x = xsouris - 100;
if (vaisseau.x < 0) vaisseau.x = 0;
if (vaisseau.x > 700) vaisseau.x = 700;

//mouvements des missiles
if (missile.y <= 0 && missile.in == true)
{
missile.x = missile.dirx;
missile.y += 12;
}

//balle sur la barre
if (start == 0){ball.x = vaisseau.x + 45; ball.y = vaisseau.y - 15;}
//restart si la balle meurt
if (ball.in == false)
{
ball.in = true;
start = 0;
}

//rebonds de la balle
if (ball.x<0) sx4=1;
if (ball.y<0) sy4=1;
if (ball.x>785) sx4=-1;
if (ball.y + 16 >= vaisseau.y && ball.x >= vaisseau.x && ball.x <= vaisseau.x + 100 ) sy4=-1;
if (ball.y > 600) ball.in=false;

for (i=0; i < 296; i++)
{
if (ball.y >= briks[i].y && ball.y <= briks[i].y + 14 && ball.x >= briks[i].x && ball.x <= briks[i].x + 20 ) {briks[i].in = false; sy4 = -(sy4); briks[i].x = 1024; briks[i].y = 1024;} //rebond bas
if (ball.y + 16 >= briks[i].y && ball.y + 16 <= briks[i].y + 14 && ball.x >= briks[i].x && ball.x <= briks[i].x + 35 ) {briks[i].in = false; sy4 = -(sy4);briks[i].x = 1024; briks[i].y = 1024;} //rebond haut
if (ball.x >= briks[i].x && ball.x <= briks[i].x + 33 && ball.y >= briks[i].y && ball.y <= briks[i].y + 10 ) {briks[i].in = false; sx4 = -(sx4);briks[i].x = 1024; briks[i].y = 1024; } //rebond gauche
if (ball.x + 15 >= briks[i].x && ball.x + 15 <= briks[i].x + 20 && ball.y >= briks[i].y && ball.y <= briks[i].y + 10 ) {briks[i].in = false; sx4 = -(sx4);briks[i].x = 1024; briks[i].y = 1024; } //rebond droite
}
// génération a l´écran
SDL_BlitSurface(firstscreen,NULL,screen,NULL);
if (ball.in == true)Blit(img_balle,screen,ball.x, ball.y);
if (vaisseau.in == true)
{
Blit(img_vaisseau,screen,vaisseau.x + 30, vaisseau.y);
if (vaisseau.anim == 2)Blit(img_vaisseaud2,screen,vaisseau.x + 60, vaisseau.y);
else Blit(img_vaisseaud,screen,vaisseau.x + 60, vaisseau.y);
if (vaisseau.anim == 0)Blit(img_vaisseaug2,screen,vaisseau.x, vaisseau.y);
else Blit(img_vaisseaug,screen,vaisseau.x , vaisseau.y);
}
for (i=0;i<296;i++)
{
if(briks[i].in ==
true)Blit(img_brique,screen,briks[i].x,briks[i].y)
;
}
if (missile.in == true)
{
Blit(img_missile,screen,missile.x,missile.y);
}
SDL_Flip(screen);
}
SDL_Quit();
SDL_ShowCursor(1);
return 0;
}

Vengeur41
Vengeur41
Niveau 10
08 septembre 2005 à 19:47:24

Le debug de dev-c++ c´est merdique...

jejej
jejej
Niveau 9
08 septembre 2005 à 20:06:45

chargement des images qui sont dans le dossier image :

"image\\sprite0.bmp" ... je pense que ça vient de la ?

Vengeur41
Vengeur41
Niveau 10
08 septembre 2005 à 20:25:02

En effet ce genre de trucs ne marche pas sur 90% des OS...

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment