[SDL] process retourne -1073741819

Résolu
leptitced13 Messages postés 15 Date d'inscription jeudi 19 mars 2009 Statut Membre Dernière intervention 31 mai 2009 - 29 mai 2009 à 20:46
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 - 3 juin 2009 à 11:04
Bonjour a tous !

Voila j'ai fait une fonction que je souhaite appeler dans mon main... Je compile: aucune erreur
Mais lorsque je run, il y a une erreur. Le .exe a cessé de fonctionner, windows cherche une erreur,
et sur la console ils me mettent "Process returned <-1073741819>"..

Je ne vois pas du tout d'où peut provenir l'erreur puisque le code "semble" correcte...
Que faire??

Merci d'avance

42 réponses

lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
31 mai 2009 à 00:10
Bah oui je pense. C'est bizarre.
0
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
31 mai 2009 à 00:11
Ahhhh !!!

Tu as mis des unsigned char au lieu de unsigned int !!

C'est peut être ça !!
0
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
31 mai 2009 à 00:13
Du coup, si tu lui donne 48 en argument, il va récupérer le char équivalent à 48 c'est à dire '0'.

Si tu lui donnes 65, il récupère 'A'.

Et forcément, il ne sais pas où blitter...
0
leptitced13 Messages postés 15 Date d'inscription jeudi 19 mars 2009 Statut Membre Dernière intervention 31 mai 2009
31 mai 2009 à 00:16
helas l'erreur ne venait pas de la ......
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
31 mai 2009 à 00:17
Ah... Mince alors...
0
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
31 mai 2009 à 00:22
Tu as bien tout mis dans l'ordre, c'est-à-dire déclaré l'écran avant de blitter quelquechose dessus ?
Essaie de mettre des Flip(screen) après chaque apply_surface()...

Moi j'y vais, je reviens surement demain.

Bonne chance !!!

@+ !!!

Cordialement, Grégory.
0
leptitced13 Messages postés 15 Date d'inscription jeudi 19 mars 2009 Statut Membre Dernière intervention 31 mai 2009
31 mai 2009 à 00:26
int main( int argc, char *argv[ ] )
{
    SDL_Surface *screen, *dpion = NULL;
    int continuer = 1;
    SDL_Event event;

    screen = SDL_SetVideoMode( 640, 480, 32, SDL_HWSURFACE );
    if( SDL_Init( SDL_INIT_VIDEO ) == -1 )
    {
        printf( "Can't init SDL:  %s\n", SDL_GetError( ) );
        return EXIT_FAILURE;
    }
    if( screen == NULL )
    {
        printf( "Can't set video mode: %s\n", SDL_GetError( ) );
        return EXIT_FAILURE;
    }

    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 17, 206, 112));
    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type) /* Test du type d'évènement */
        {
            case SDL_QUIT: /* Si c'est un évènement de type "Quitter" */
                continuer = 0;
                break;
            default:
                initavcdouble(screen,1,0,0);
                break;
        }
        SDL_Flip( screen );
    }

    SDL_FreeSurface( dpion );
    SDL_Quit();
    return EXIT_SUCCESS;

}

voila a  quoi ressemble mon "main" apres quelques modifs... et effectivement j'ai mis des SDL_Flip apres chaque apply_surface( )..

a demain alors !! ++ 
0
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
31 mai 2009 à 10:11
Salut.

En fait, commet SDL.h inclus déjà stdio.h et stdlib.h, ça sert à rien de les mettre.

Ensuite, déclare tes fonctions dans l'ordre où elles sont appelées.

load_image(..)
{
}

apply_surface(...)
{
}

initavcdouble(...)
{
}

main()
{
}
0
leptitced13 Messages postés 15 Date d'inscription jeudi 19 mars 2009 Statut Membre Dernière intervention 31 mai 2009
31 mai 2009 à 10:46
il se passe toujours rien a part le fond vert ...
attends regarde un peu mon initavcdouble (...) sa vient peut etre de la
void initavcdouble(SDL_Surface *screen,unsigned int i,unsigned int x,unsigned int y)
{

    SDL_Surface *dpion = NULL;

    srand(time(NULL));

    for(i=1;i<=4;i++)
    {
        do
        {
            solution[i]=rand()%9;
        }
        while (solution[i]=0);
        switch (solution[i])
        {
            case '1':
                dpion = load_image("pion beige.bmp");
                apply_surface(30,40,dpion,screen,x,y);
                SDL_Flip( screen );
                break;
            case '2':
                dpion = load_image("pion bleu clair.bmp");
                apply_surface(30,40,dpion,screen,x,y);
                SDL_Flip( screen );
                break;
            case '3':
                dpion = load_image("pion rose.bmp");
                apply_surface(30,40,dpion,screen,x,y);
                SDL_Flip( screen );
                break;
            case '4':
                dpion = load_image("pion vert.bmp");
                apply_surface(30,40,dpion,screen,x,y);
                SDL_Flip( screen );
                break;
            case '5':
                dpion = load_image("pion vert clair.bmp");
                apply_surface(30,40,dpion,screen,x,y);
                SDL_Flip( screen );
                break;
            case '6':
                dpion = load_image("pion bleu.bmp");
                apply_surface(30,40,dpion,screen,x,y);
                SDL_Flip( screen );
                break;
            case '7':
                dpion = load_image("pion marron.bmp");
                apply_surface(30,40,dpion,screen,x,y);
                SDL_Flip( screen );
                break;
            case '8':
                dpion = load_image("pion rouge.bmp");
                apply_surface(30,40,dpion,screen,x,y);
                SDL_Flip( screen );
                break;
            default : break;
        }
        x = x+50;
    }
}
0
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
31 mai 2009 à 10:52
Je pense que la fonction rentre toujours dans le default du switch.

Essaie de faire blitter une image quand on rentre dans le default du switch.

            default:
                dpion = load_image("pion rouge.bmp");
                apply_surface(30,40,dpion,screen,x,y);
                SDL_Flip( screen );
                break;

Si ça affiche le pion rouge, ça veut dire que le problème vient de là.
0
leptitced13 Messages postés 15 Date d'inscription jeudi 19 mars 2009 Statut Membre Dernière intervention 31 mai 2009
31 mai 2009 à 10:59
tu avais raison !! l'image rouge s'affiche 4 fois desormais.
Mais je veux faire une sequence de 4 couleurs aleatoires, d'où mon switch en fait
0
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
31 mai 2009 à 11:03
Ca veut donc dire que la fonction passe toujours pas le default du switch.

Si tu as remplacé unsigned char solution[numero] par unsigned int solution[numero],

enlève les ' et ' autour des '1', '2'... pour qu'il y ait uniquement case 1:, case 2: sans les apostrophes.
0
leptitced13 Messages postés 15 Date d'inscription jeudi 19 mars 2009 Statut Membre Dernière intervention 31 mai 2009
31 mai 2009 à 12:06
le probleme semble ne pas venir de là...
que ce soit en "unsigned int avec case1" ou en "unsigned char avec case '1' ", on passe toujours uniquement par le default
0
leptitced13 Messages postés 15 Date d'inscription jeudi 19 mars 2009 Statut Membre Dernière intervention 31 mai 2009
31 mai 2009 à 12:09
c'est bon j'ai reussi !!! en fait le probleme venait de ma boucle do {} while... je l'ai enleve, je suis passer en unsigned int et sa marche
0
leptitced13 Messages postés 15 Date d'inscription jeudi 19 mars 2009 Statut Membre Dernière intervention 31 mai 2009
31 mai 2009 à 12:13
par contre desomais au moindre mouvement de souris, les couleurs changent... Or je veux qu'elles changent une seule fois pendant l'execution du programme
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
3 juin 2009 à 09:21
Salut
Juste une petite chose sur ce bout de code:
do
{
         solution[i]=rand()%9;
}
while (solution[i]=0);

[../auteur/LECTPE/1204123.aspx lectpe] t'a dis quelque de complètement faut: le while attend une condition. La tu lui donnes une affectation... C'est comme si tu remplaçais  le code plus haut par cela: solution[i]=0;

do

{

         solution[i]=rand()%9;

}

while (solution[i]==0);  est correcte ou plus simplement  solution[i]=rand%8+1;

Pour le reste, je n'ai pas regardé.
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
0
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
3 juin 2009 à 09:49
Le problème, c'est qu'avec un double égal, tu risques d'avoir une boucle infinie.
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
3 juin 2009 à 10:14
Ben non, absolument pas. A chaque itération, tu as 9 chances sur 10 de sortir de la boucle...
La puissance de la boucle while c'est justement de faire des comparaisons et surtout pas des affectations.
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
0
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
3 juin 2009 à 10:18
Bah pour moi, c'est pas le cas :
si je mets ==, il ne vérifie jamais cette condition et ne sort jamais de la boucle,
et si je mets =, ça marche...

Je n'ai jamais vraiment compris pourquoi étant donné que ce que tu dis est parfaitement vrai et évident.

Mais bon, c'est pas grave, tant que le problème de leptitced13 est résolu.

Cordialement, Grégory.
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
3 juin 2009 à 10:32
Je te conseil de lire quelque livre sur la programmation parce que tu as quelques lacunes.
Une boucle while en anglais correspond à une boucle tant que en français.
Donc on reste dans la boucle tant que solution[i] est égale à 0 ce qui est loin de faire une boucle infinie.
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
0
Rejoignez-nous