Partage
  • Partager sur Facebook
  • Partager sur Twitter

process returned 3 : trop d'initialisations?

Sujet résolu
    14 février 2019 à 22:57:46

    Bonjour, 

    j'ai un projet dans lequel il m'est impossible d'initialiser de variables supplémentaires, auquel cas le programme plante et renvoie 3.

    J'ai fait une déclaration et initialisation de 10 int, et d'autres variables au nombre de 16.

    Voici le code, il est assez long :

    int main(int argc, char *argv[])
    {
    
        SDL_Surface *ecran=NULL, **listeSurfacesMP3=NULL;
        SDL_Event event;
        SDL_Rect position;
        SDL_Color couleurNoire={0,0,0}, couleurBlanche={255,255,255};
        int continuer=1, tempsActuel=0,tempsPrecedent=0, x=0, y=0, nombreDeMP3=0, i=0, numeroMusique=0, jouerMusique=0, visualiserSpectre=0;
        char *extension=NULL;
        char **listeNomsMP3=NULL;
        FMOD_SYSTEM *system;
        FMOD_SOUND *musique;
        FMOD_RESULT resultat;
        FMOD_CHANNELGROUP *canal=NULL;
        float spectre[LARGEUR_FENETRE];
        DIR *dirp;
        struct dirent *dp;
        TTF_Font *police=NULL;
    
    
        if(TTF_Init()==-1)
        {
            fprintf(stderr,"Erreur d'initialisation de TTF_Init : %s\n",TTF_GetError());
            exit(EXIT_FAILURE);
        }
    
        police=TTF_OpenFont("angelina.ttf",20);
    
        if((dirp=opendir("."))==NULL)
        {
            fprintf(stderr,"Impossible d'ouvrir '.'");
            exit(EXIT_FAILURE);
        }
        while((dp=readdir(dirp))!=NULL)
        {
    
            if((extension=strchr(dp->d_name,'.'))!=NULL)
            {
                if(strcmp(extension,".mp3")==0)
                {
    
                    nombreDeMP3++;
                    listeSurfacesMP3=realloc(listeSurfacesMP3,nombreDeMP3*sizeof(SDL_Surface*));
                    listeSurfacesMP3[nombreDeMP3-1]=TTF_RenderText_Shaded(police,dp->d_name,couleurNoire,couleurBlanche);
                    listeNomsMP3=realloc(listeNomsMP3,nombreDeMP3*sizeof(char*));
                    listeNomsMP3[nombreDeMP3-1]=malloc(strlen(dp->d_name+1)*sizeof(char));
                    strcpy(listeNomsMP3[nombreDeMP3-1],dp->d_name);
    
                }
            }
    
        }
        for(i=0;i<nombreDeMP3;i++)
        {
            fprintf(stdout,"%s\n",listeNomsMP3[i]);
        }
        FMOD_System_Create(&system);
        FMOD_System_Init(system,1,FMOD_INIT_NORMAL,NULL);
    
    
        if(SDL_Init(SDL_INIT_VIDEO)==-1)
        {
            fprintf(stderr,"Erreur d'initialisation de la SDL : %s\n",SDL_GetError());
            exit(EXIT_FAILURE);
        }
    
        ecran=SDL_SetVideoMode(LARGEUR_FENETRE,HAUTEUR_FENETRE,32,SDL_HWSURFACE);
        if(ecran==NULL)
        {
            fprintf(stderr,"Impossible de charger le mode vidéo : %s\n",SDL_GetError());
            exit(EXIT_FAILURE);
        }
        SDL_WM_SetCaption("Lecteur MP3",NULL);
    
    
    
    
        while(continuer)
        {
            while(SDL_PollEvent(&event))
            {
                switch(event.type)
                {
                case SDL_QUIT:
                    continuer=0;
                    break;
                case SDL_MOUSEBUTTONDOWN:
                    switch(event.button.button)
                    {
                    case SDL_BUTTON_LEFT:
    
    
                            for(i=0;i<nombreDeMP3;i++)
                            {
                                if((event.button.x<listeSurfacesMP3[i]->w)&&(event.button.y>20*i)&&(event.button.y<20*(i+1)))
                                {
                                    numeroMusique=i;
                                    jouerMusique=1;
                                }
    
                            }
    
    
    
    
    
                        break;
                    default:
                        break;
                    }
                default:
                    break;
                }
            }
    
    
            if(jouerMusique)
            {
                resultat=FMOD_System_CreateSound(system,listeNomsMP3[numeroMusique], FMOD_SOFTWARE|FMOD_2D|FMOD_CREATESTREAM,0,&musique);
                if(resultat!=FMOD_OK)
                {
                    fprintf(stderr,"Impossible de lire le fichier mp3\n");
                    exit(EXIT_FAILURE);
                }
                FMOD_System_PlaySound(system,FMOD_CHANNEL_FREE,musique,0,NULL);
                FMOD_System_GetMasterChannelGroup(system,&canal);
    
                jouerMusique=0;
                visualiserSpectre=1;
    
    
            }
    
    
            if(visualiserSpectre)
            {
                tempsActuel=SDL_GetTicks();
                if(tempsActuel-tempsPrecedent>DELAI_MISE_A_JOUR)
                {
                    FMOD_ChannelGroup_GetSpectrum(canal,spectre,LARGEUR_FENETRE,0,FMOD_DSP_FFT_WINDOW_RECT);
                    tempsPrecedent=tempsActuel;
                }
                else
                {
                    SDL_Delay(DELAI_MISE_A_JOUR-(tempsActuel-tempsPrecedent));
                }
                SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,0,0,0));
                SDL_LockSurface(ecran);
                for(x=0;x<LARGEUR_FENETRE;x++)
                {
                    fprintf(stdout,"x=%d, spectre=%f\n",x,spectre[x]);
                    if(spectre[x]*20>1)
                    {
    
                        spectre[x]=1.0/20.0;
                    }
                    for(y=HAUTEUR_FENETRE-spectre[x]*HAUTEUR_FENETRE*20;y<HAUTEUR_FENETRE;y++)
                    {
    
                        setPixel(ecran,x,y,SDL_MapRGB(ecran->format,(HAUTEUR_FENETRE-1-y)*255.0/HAUTEUR_FENETRE,y*255.0/HAUTEUR_FENETRE,0));
    
                    }
                }
                SDL_UnlockSurface(ecran);
                SDL_Flip(ecran);
            }
            else
            {
                SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,255,255,255));
                position.x=0;
                for(i=0;i<nombreDeMP3;i++)
                {
                    position.y=20*i;
                    SDL_BlitSurface(listeSurfacesMP3[i],NULL,ecran,&position);
                }
                SDL_Flip(ecran);
                }
    
        }
    
        TTF_CloseFont(police);
        TTF_Quit();
        SDL_Quit();
        FMOD_System_Close(system);
        FMOD_System_Release(system);
    
        return EXIT_SUCCESS;
    }


    Ce qui m'importe ce sont les déclarations initialisations du début :

    SDL_Surface *ecran=NULL, **listeSurfacesMP3=NULL;
        SDL_Event event;
        SDL_Rect position;
        SDL_Color couleurNoire={0,0,0}, couleurBlanche={255,255,255};
        int continuer=1, tempsActuel=0,tempsPrecedent=0, x=0, y=0, nombreDeMP3=0, i=0, numeroMusique=0, jouerMusique=0, visualiserSpectre=0;
        char *extension=NULL;
        char **listeNomsMP3=NULL;
        FMOD_SYSTEM *system;
        FMOD_SOUND *musique;
        FMOD_RESULT resultat;
        FMOD_CHANNELGROUP *canal=NULL;
        float spectre[LARGEUR_FENETRE];
        DIR *dirp;
        struct dirent *dp;
        TTF_Font *police=NULL;

    Merci pour vos réponses

    • Partager sur Facebook
    • Partager sur Twitter
      14 février 2019 à 23:41:52

      Hello,

      Non, ce n'est pas un problème de trop d'initialisations, c'est un bon vieux segfault.

      1) je n'ai jamais utilisé sdl_ttf sans avoir au préalable fais un SDL_Init() -- mais peut-être que cela fonctionne (quoique j'ai un doute, les ttf_rendertext_xxxx créant des surfaces)

      2) vérifie que police ne soit pas NULL

      3) il y a une erreur de malloc() ligne 46: strlen(....+1) → strlen(....)+1

      4) quelle horreur ce main() kilométrique: fais des fonctions ! Et c'est tellement plus simple pour tester

      -
      Edité par edgarjacobs 15 février 2019 à 0:32:51

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        15 février 2019 à 12:53:02

        J'ai trouvé la ligne qui pose problème : 

        listeSurfacesMP3[nombreDeMP3-1]=TTF_RenderText_Shaded(police,dp->d_name,couleurNoire,couleurBlanche);

        Je ne comprend pas pourquoi ça ne marche pas.

        • Partager sur Facebook
        • Partager sur Twitter
          15 février 2019 à 14:30:46

          As-tu lu ce que j'ai écrit ?

          As-tu corrigé la ligne 46 ?

          As-tu testé ce que je propose ?

          -
          Edité par edgarjacobs 15 février 2019 à 14:41:37

          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            15 février 2019 à 17:43:53

            Oui, voici le nouveau code : 

            #include <SDL/SDL.h>
            #include <fmodex/fmod.h>
            #include <dirent.h>
            #include <SDL/SDL_ttf.h>
            
            
            #define HAUTEUR_FENETRE 512
            #define LARGEUR_FENETRE 512
            #define DELAI_MISE_A_JOUR 25
            
            void setPixel(SDL_Surface *surface, int x, int y, Uint32 pixel)
            {
                int bpp = surface->format->BytesPerPixel;
            
                Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
            
                switch(bpp) {
                case 1:
                    *p = pixel;
                    break;
            
                case 2:
                    *(Uint16 *)p = pixel;
                    break;
            
                case 3:
                    if(SDL_BYTEORDER == SDL_BIG_ENDIAN) {
                        p[0] = (pixel >> 16) & 0xff;
                        p[1] = (pixel >> 8) & 0xff;
                        p[2] = pixel & 0xff;
                    } else {
                        p[0] = pixel & 0xff;
                        p[1] = (pixel >> 8) & 0xff;
                        p[2] = (pixel >> 16) & 0xff;
                    }
                    break;
            
                case 4:
                    *(Uint32 *)p = pixel;
                    break;
                }
            }
            
            
            void initialiserSDL(SDL_Surface *ecran)
            {
                if(SDL_Init(SDL_INIT_VIDEO)==-1)
                {
                    fprintf(stderr,"Erreur d'initialisation de la SDL : %s\n",SDL_GetError());
                    exit(EXIT_FAILURE);
                }
            
                ecran=SDL_SetVideoMode(LARGEUR_FENETRE,HAUTEUR_FENETRE,32,SDL_HWSURFACE);
                if(ecran==NULL)
                {
                    fprintf(stderr,"Impossible de charger le mode vidéo : %s\n",SDL_GetError());
                    exit(EXIT_FAILURE);
                }
            
                SDL_WM_SetCaption("Lecteur MP3",NULL);
            
            
            }
            
            void initialiserTTF(TTF_Font *police)
            {
                 if(TTF_Init()==-1)
                {
                    fprintf(stderr,"Erreur d'initialisation de TTF_Init : %s\n",TTF_GetError());
                    exit(EXIT_FAILURE);
                }
            
                police=TTF_OpenFont("angelina.ttf",20);
                if(police==NULL)
                {
                    fprintf(stderr,"Impossible d'ouvrir la police angelina.ttf  : %s\n",TTF_GetError());
                    exit(EXIT_FAILURE);
                }
            
            }
            
            
            
            void remplirTableauxMP3(SDL_Surface **listeSurfacesMP3, char **listeNomsMP3, int nombreDeMP3, TTF_Font *police)
            {
                DIR *dirp;
                struct dirent *dp;
                char *extension=NULL;
                SDL_Color couleurNoire={0,0,0}, couleurBlanche={255,255,255};
                SDL_Surface *surface=NULL;
            
                 if((dirp=opendir("."))==NULL)
                {
                    fprintf(stderr,"Impossible d'ouvrir '.'");
                    exit(EXIT_FAILURE);
                }
            
                listeSurfacesMP3=malloc(sizeof(SDL_Surface*));
                while((dp=readdir(dirp))!=NULL)
                {
            
            
                    if((extension=strchr(dp->d_name,'.'))!=NULL)
                    {
            
                        if(strcmp(extension,".mp3")==0)
                        {
                            fprintf(stdout,"extension mp3");
                            nombreDeMP3++;
                            listeSurfacesMP3=realloc(listeSurfacesMP3,nombreDeMP3*sizeof(SDL_Surface*));
                            listeSurfacesMP3[nombreDeMP3]=TTF_RenderText_Shaded(police,dp->d_name,couleurNoire,couleurBlanche);
                            listeNomsMP3=realloc(listeNomsMP3,nombreDeMP3*sizeof(char*));
                            listeNomsMP3[nombreDeMP3-1]=malloc((strlen(dp->d_name)+1)*sizeof(char));
                            strcpy(listeNomsMP3[nombreDeMP3-1],dp->d_name);
            
            
                        }
            
                    }
            
                }
                fprintf(stdout,"fin fonction");
            
            }
            
            void initialiserFMOD(FMOD_SYSTEM *system)
            {
                FMOD_System_Create(&system);
                FMOD_System_Init(system,1,FMOD_INIT_NORMAL,NULL);
            
            }
            
            void fermerQuitterLiberer(TTF_Font *police,FMOD_SYSTEM *system, SDL_Surface **listeSurfacesMP3, char **listeNomsMP3, int nombreDeMP3)
            {
                int i=0;
                for(i=0;i<nombreDeMP3;i++)
                {
                    free(listeSurfacesMP3[i]);
                    free(listeNomsMP3[i]);
                }
                free(listeSurfacesMP3);
                free(listeNomsMP3);
                TTF_CloseFont(police);
                TTF_Quit();
                SDL_Quit();
                FMOD_System_Close(system);
                FMOD_System_Release(system);
            }
            
            int main(int argc, char *argv[])
            {
            
                SDL_Surface *ecran=NULL, **listeSurfacesMP3=NULL;
                SDL_Event event;
                SDL_Rect position;
            
                int continuer=1, tempsActuel=0,tempsPrecedent=0, x=0, y=0, nombreDeMP3=0, i=0, numeroMusique=0, jouerMusique=0, visualiserSpectre=0;
            
                char **listeNomsMP3=NULL;
                FMOD_SYSTEM *system=NULL;
                FMOD_SOUND *musique;
                FMOD_RESULT resultat;
                FMOD_CHANNELGROUP *canal=NULL;
                float spectre[LARGEUR_FENETRE];
            
                TTF_Font *police=NULL;
            
                initialiserSDL(ecran);
            
                initialiserTTF(police);
            
                remplirTableauxMP3(listeSurfacesMP3,listeNomsMP3, nombreDeMP3, police);
            
                for(i=0;i<nombreDeMP3;i++)
                {
                    fprintf(stdout,"%s\n",listeNomsMP3[i]);
                }
            
                initialiserFMOD(system);
            
            
            
                while(continuer)
                {
                    while(SDL_PollEvent(&event))
                    {
                        switch(event.type)
                        {
                        case SDL_QUIT:
                            continuer=0;
                            break;
                        case SDL_MOUSEBUTTONDOWN:
                            switch(event.button.button)
                            {
                            case SDL_BUTTON_LEFT:
            
                                    for(i=0;i<nombreDeMP3;i++)
                                    {
                                        if((event.button.x<listeSurfacesMP3[i]->w)&&(event.button.y>20*i)&&(event.button.y<20*(i+1)))
                                        {
                                            numeroMusique=i;
                                            jouerMusique=1;
                                        }
            
                                    }
            
                                break;
                            default:
                                break;
                            }
                        default:
                            break;
                        }
                    }
            
            
                    if(jouerMusique)
                    {
                        resultat=FMOD_System_CreateSound(system,listeNomsMP3[numeroMusique], FMOD_SOFTWARE|FMOD_2D|FMOD_CREATESTREAM,0,&musique);
                        if(resultat!=FMOD_OK)
                        {
                            fprintf(stderr,"Impossible de lire le fichier mp3\n");
                            exit(EXIT_FAILURE);
                        }
                        FMOD_System_PlaySound(system,FMOD_CHANNEL_FREE,musique,0,NULL);
                        FMOD_System_GetMasterChannelGroup(system,&canal);
            
                        jouerMusique=0;
                        visualiserSpectre=1;
            
            
                    }
            
            
                    if(visualiserSpectre)
                    {
                        tempsActuel=SDL_GetTicks();
                        if(tempsActuel-tempsPrecedent>DELAI_MISE_A_JOUR)
                        {
                            FMOD_ChannelGroup_GetSpectrum(canal,spectre,LARGEUR_FENETRE,0,FMOD_DSP_FFT_WINDOW_RECT);
                            tempsPrecedent=tempsActuel;
                        }
                        else
                        {
                            SDL_Delay(DELAI_MISE_A_JOUR-(tempsActuel-tempsPrecedent));
                        }
                        SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,0,0,0));
                        SDL_LockSurface(ecran);
                        for(x=0;x<LARGEUR_FENETRE;x++)
                        {
                            fprintf(stdout,"x=%d, spectre=%f\n",x,spectre[x]);
                            if(spectre[x]*20>1)
                            {
            
                                spectre[x]=1.0/20.0;
                            }
                            for(y=HAUTEUR_FENETRE-spectre[x]*HAUTEUR_FENETRE*20;y<HAUTEUR_FENETRE;y++)
                            {
            
                                setPixel(ecran,x,y,SDL_MapRGB(ecran->format,(HAUTEUR_FENETRE-1-y)*255.0/HAUTEUR_FENETRE,y*255.0/HAUTEUR_FENETRE,0));
            
                            }
                        }
                        SDL_UnlockSurface(ecran);
                        SDL_Flip(ecran);
                    }
                    else
                    {
                        SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,255,255,255));
                        position.x=0;
                        for(i=0;i<nombreDeMP3;i++)
                        {
                            position.y=20*i;
                            SDL_BlitSurface(listeSurfacesMP3[i],NULL,ecran,&position);
                        }
                        SDL_Flip(ecran);
                        }
            
                }
            
                fermerQuitterLiberer(police, system, listeSurfacesMP3,listeNomsMP3, nombreDeMP3);
            
            
                return EXIT_SUCCESS;
            }
            



            • Partager sur Facebook
            • Partager sur Twitter
              15 février 2019 à 23:30:09

              Re,-

              Désolé, mais il y a encore des notions de C qui te font défaut.

              Lis d'abord ceci.

              Tu comprendras donc que tes fonctions initialiser(type *variable) ne modifieront que la variable locale, pas la valeur de la variable dans la fonction appelante.

              Par exemple, pour sdl, il faut écrire

              void initialiserSDL(SDL_Surface **ecran) {
              	....
              	*ecran=SDL_SetVideoMode(LARGEUR_FENETRE,HAUTEUR_FENETRE,32,SDL_HWSURFACE);
              	if(*ecran==NULL)
              	....
              }
              
              int main(....) {
              	SDL_Surface *ecran;
              	
              	initialiserSDL(&ecran);

              Ou, autre manière

              SDL_Surface *initialiserSDL(void) {
              	SDL_Surface *ecran;
              	....
              	ecran=SDL_SetVideoMode(LARGEUR_FENETRE,HAUTEUR_FENETRE,32,SDL_HWSURFACE);
              	if(ecran==NULL)
              	....
              	
              	return(ecran);
              }
              
              int main(....) {
              	SDL_Surface *ecran;
              	
              	ecran=initialiserSDL();

              Idem pour police et system

              Idem égalemenrt pour listeSurfacesMP3, listeNomsMP3 et nombreDeMP3 lors de l'appel à remplirTableauMP3 (et là tu vas te retrouver avec des ***variables pour listeSurfacesMP3 et listeNomsMP3). Mais pour cette fonction, pas le choix, il faut passer les adresses puisque les fonctions ne renvoyent qu'une seule valeur

              Il faut que tu procèdes petit à petit, comme le conseille michelbillaud dans ce post. J'y ajouterais que commencer par tester le parcours du répertoire et la mémorisation des noms de fichiers serait une bonne chose (pour le vérifier, un simple affichage en console), ensuite de pouvoir les lire avec fmod, avant de commencer avec les affichages sdl, qui ne sont, après tout, qu'un (simple) emballage esthétique.

              -
              Edité par edgarjacobs 16 février 2019 à 0:23:19

              • Partager sur Facebook
              • Partager sur Twitter

              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                16 février 2019 à 0:24:00

                J'ai vu que ça ne plante pas lorsque j'ouvre la police utilisée dans la fonction remplirTableauxMP3 au lieu de la fonction initialiserTTF. Je pensais que comme police est un pointeur, il est bien transmis de fonction en fonction et est donc chargé dans initialiserTTF.

                Police vaut null après appel à initialiserTTF, dans la fonction main. Il faudrait donc lui passer un pointeur sur TTF_Font*, autrement un pointeur sur un pointeur.

                • Partager sur Facebook
                • Partager sur Twitter
                  16 février 2019 à 0:28:35

                  J'ai édité la fin de mon message pendant que tu écrivais le tien

                  sgu35 a écrit:

                  Police vaut null après appel à initialiserTTF, dans la fonction main. Il faudrait donc lui passer un pointeur sur TTF_Font*, autrement un pointeur sur un pointeur.


                  That's what I wrote....

                  -
                  Edité par edgarjacobs 16 février 2019 à 0:31:17

                  • Partager sur Facebook
                  • Partager sur Twitter

                  On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                    16 février 2019 à 16:33:20

                    Encore une question : faut-il  envoyer un pointeur sur police, sur system, sur listeSurfacesMP3 et sur listeNomsMP3 dans la fonction fermerQuitterLiberer (là où sont faits les free, où on quitte la sdl et ttf et où on ferme et on libère system)?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 février 2019 à 16:58:29

                      Non, puisque tu ne modifies pas les variables elles-memes: tu ne fais que modifier (ou tu demandes, via des fonctions, de modifier) ce qui est pointé, mais tu ne modifies pas le pointeur.

                      -
                      Edité par edgarjacobs 16 février 2019 à 19:28:56

                      • Partager sur Facebook
                      • Partager sur Twitter

                      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                        16 février 2019 à 21:02:18

                        Je n'ai pas bien compris : est-ce que ce sont les variables ou les pointeurs qui ne sont pas modifiés?

                        -
                        Edité par sgu35 16 février 2019 à 21:15:54

                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 février 2019 à 22:42:16

                          Un pointeur est une variable, qui contient une adresse.

                          J'aurais dû écrire

                          Non, puisque tu ne modifies pas les variables elles-memespas les pointeurs eux-mêmes: tu ne fais que modifier (ou tu demandes, via des fonctions, de modifier) ce qui est pointé, mais tu ne modifies pas le pointeur.



                          • Partager sur Facebook
                          • Partager sur Twitter

                          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                            17 février 2019 à 20:29:26

                            Quels pointeurs reprennent la valeur NULL après appel à la fonction fermerQuitterLiberer?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 février 2019 à 23:09:08

                              Aucun.

                              Pour mémoire

                              type *ptr;
                              ptr=malloc(....);
                              ....
                              free(ptr);

                              libère l'espace mémoire, mais ne change pas le pointeur....

                              • Partager sur Facebook
                              • Partager sur Twitter

                              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                                18 février 2019 à 19:53:53

                                Ok merci, je marque le sujet résolu.
                                • Partager sur Facebook
                                • Partager sur Twitter

                                process returned 3 : trop d'initialisations?

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown