IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Boucle for qui se bloque


Sujet :

C

  1. #41
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Te rends tu compte que tu déclares une variable globale i dans ton .h ???
    C'est le genre de pratique à exclure définitivement.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  2. #42
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Ca aussi c'est pas terrible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char *tmp=NULL;
    ...
    *tmp = ...;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(nom,"%s%s",tmp);
    Ca, c'est toujours pas bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tmp = realloc(nom, sizeof(char*));
    Et les remarques d'Emmanuel sur realloc sont toujours valables

  3. #43
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Flophx
    Bien, je reposte donc mon code...
    Peux mieux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Compiling: video.c
    In file included from video.c:1:
    video.h:5: warning: initialization discards qualifiers from pointer target type
    video.h:5: warning: initialization discards qualifiers from pointer target type
    video.h:5: warning: initialization discards qualifiers from pointer target type
    video.h:5: warning: initialization discards qualifiers from pointer target type
    video.h:5: warning: initialization discards qualifiers from pointer target type
    video.c: In function `main':
    video.c:63: warning: implicit declaration of function `realloc'
    video.c:72: warning: too few arguments for format
    video.c:73: warning: implicit declaration of function `free'
    video.c:94: warning: too few arguments for format
    video.c: In function `commande_acquisition':
    video.c:21: warning: 'commandeLog' might be used uninitialized in this function
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 6 seconds)
    0 errors, 10 warnings
    Voici du code corrigé qui a l'air de fonctionner, mais on a pas les specs... EDIT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
     
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <assert.h>
     
    /**
    **Cette fontion permet de vérifier qu'il y a bien le nombre de paramètres nécessaires
    **à  l'initialisation de la vidéo
    **/
    void test_parametres (char const **a, char *b)
    {
     
       if (b == NULL)
       {
          printf ("Erreur de chargement sur %s\n", *a);
       }
       else
       {
          *a = b;
       }
    }
     
    /*
    Fonction main qui permet de créer un fichier vidéo
    */
    int main (int argc, char *argv[])
    {
    #define NB_PARAM 5
     
       char const *parametres[] =
          { "duree", "width", "height", "nomDossier", "device" };
     
       int j = sizeof parametres / sizeof *parametres;
       char *nom = NULL;
       int i;
     
       for (i = argc - 1; i > 0; i--)
       {
          printf ("i: %d\n", i);
          switch (j)
          {
          case 4:
             assert (i > 0);
             printf ("Parametre lu: %s\n", argv[i]);
     
             if (strncmp (argv[i], "/dev/", 5) == 0)
             {
                assert (j >= 0);
                test_parametres (&parametres[j], argv[i]);
                printf ("parametre defini #%d: %s\n", j, parametres[j]);
                j--;
                printf ("j: %d\n", j);
             }
             break;
          case 3:
     
             printf ("ici");
             if (strncmp (argv[i], "/mnt/", 5) == 0)
             {
                size_t size;
     
                if (nom == NULL)
                {
                   size = strlen (argv[i]) + 1;
                   nom = malloc (size);
                   if (nom != NULL)
                   {
                      strcpy (nom, argv[i]);
                   }
                }
                else
                {
                   assert (i > 0);
                   size = strlen (nom) + strlen (argv[i]) + 1;
                   void *tmp = realloc (nom, size);
     
                   if (tmp != NULL)
                   {
                      nom = tmp;
     
                      strcat (nom, argv[i]);
                   }
                   else
                   {
                      free (nom), nom = NULL;
                   }
                }
     
                if (nom != NULL)
                {
                   test_parametres (&parametres[j], nom);
                   printf ("parametre defini #%d: %s\n", j, parametres[j]);
                   j--;
                   printf ("j: %d\n", j);
                }
             }
     
             else
             {
                size_t size;
     
                if (nom == NULL)
                {
                   assert (i > 0);
                   size = strlen (argv[i]) + 1;
                   nom = malloc (size);
                   if (nom != NULL)
                   {
                      strcpy (nom, argv[i]);
                   }
                }
                else
                {
                   assert (i > 0);
                   size = strlen (nom) + strlen (argv[i]) + 1;
                   void *tmp = realloc (nom, size);
     
                   if (tmp != NULL)
                   {
                      nom = tmp;
     
                      strcat (nom, argv[i]);
                   }
                   else
                   {
                      free (nom), nom = NULL;
                   }
                }
                if (nom != NULL)
                {
                   printf ("Construction nom: %s\n", nom);
                }
             }
             break;
          default:
     
             free (nom), nom = NULL;
             assert (i > 0);
             test_parametres (&parametres[j], argv[i]);
             assert (j >= 0);
             printf ("parametre defini #%d: %s\n", j, parametres[j]);
             j--;
             printf ("j: %d\n", j);
          }
       }
     
       return 0;
    }
    Donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    i: 8
    parametre defini #5: /dev/video0
    j: 4
    i: 7
    Parametre lu: drive
    i: 6
    Parametre lu: U3
    i: 5
    Parametre lu: /mnt/My
    i: 4
    Parametre lu: 240
    i: 3
    Parametre lu: 320
    i: 2
    Parametre lu: 00:01:00
    i: 1
    Parametre lu: ./video
     
    Press ENTER to continue.
    avec cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums2\
    --------------------------------------------------------------------------------
    Checking for existence: console.exe
    Executing: C:\CodeBlocks/console_runner.exe "C:\dev\forums2\console.exe" ./video 00:01:00 320 240 /mnt/My U3 drive /dev/video0 (in .)
    Process terminated with status 0 (0 minutes, 4 seconds)
    0 errors, 0 warnings
    Pas de Wi-Fi à la maison : CPL

  4. #44
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Points : 64
    Points
    64
    Par défaut
    Donc, en utilisant le compilateur "amélioré" et les remarques , voici le code modifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
    #include "video.h"
     
    /**
    **Cette fontion permet de vérifier qu'il y a bien le nombre de paramètres nécessaires
    **à  l'initialisation de la vidéo
    **/
    void test_parametres(char **a, char *b){
     
    	if(b==NULL){
    		printf("Erreur de chargement sur %s\n", *a);}
    	else{
    		*a=b;
    	}
    }
     
    /**
    **Permet de composer la commande qui permet de déclencher la video.
    **/
    char *commande_acquisition(char *param[NB_PARAM]){
     
    	char *commandeLog=NULL;
     
    	commandeLog = malloc(256);
     
    	if(commandeLog!=NULL){
     
    		sprintf(commandeLog, "streamer -t %s -s %sx%s -r 24 -o %s.yuv -c %s",param[0], param[1], param[2],param[3],param[4]);
    		printf("Commande exécutée: '%s'\n", commandeLog);
     
    	}
    	else{
    		printf( "Erreur sur la création de la commande");
    }
     
     
     
    return commandeLog;
    }
     
    /*
    Fonction main qui permet de créer un fichier vidéo
    */
    int main(int argc,char *argv[]){
     
    	int j=4;
    	char* nom=NULL;
    	char *tmp=NULL;
    	int i=argc-1;
    	for(i=argc-1; i>0; i--){
     
    		printf("i: %d\n", i);
    		if(j==4){
     
    			printf("Parametre lu: %s\n", argv[i]);
     
    			if(strncmp(argv[i],"/dev/",5)==0){
     
    				test_parametres(&parametres[j],argv[i]);
    				printf("parametre defini n°%d: %s\n", j, parametres[j]);
    				j--;
    				printf("j: %d\n",j);
    			}
    			else{
    			}
     
    		}
     
    		else if(j==3){
     
    			printf("ici\n");
    			fflush(stdout);
    			if(strncmp(argv[i],"/mnt/",5)==0){
     
    				tmp = realloc(nom, (strlen(nom)+2));
     
    				if(tmp!=NULL){
    					nom=tmp;
    					nom=realloc(nom, (strlen(argv[i])+strlen(tmp)+2));
     
    					if(nom!=NULL){
     
    						strcpy(nom,argv[i]);
    						sprintf(nom,"%s",tmp);
    						free(tmp);
    						test_parametres(&parametres[j],nom);
    						printf("parametre defini n°%d: %s\n", j, parametres[j]);
    						j--;
    						printf("j: %d\n",j);
    					}
    				}
     
    			}
     
    			else{
     
    				tmp = realloc(nom, sizeof(char*));
     
    				if(tmp!=NULL){
    					tmp=nom;
    					nom=realloc(nom, (strlen(argv[i])+strlen(tmp)+2));
     
    					if(nom!=NULL){
     
    						strcpy(nom,argv[i]);
    						sprintf(nom,"%s",tmp);
    						printf("Construction nom: %s\n", nom);
    					}
    				}
     
     
    			}	
     
    		}
     
     
    		else{
    			free(nom);
    			test_parametres(&parametres[j],argv[i]);
    			printf("parametre defini n°%d: %s\n", j, parametres[j]);
    			j--;
    			printf("j: %d\n",j);
    		}
     
    	}
     
    	return 0;
    }
    et j'ai enlevé la variable globlae du video.h

  5. #45
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Points : 64
    Points
    64
    Par défaut
    Voici ce le résultat de la compilation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [florian@192 Prog_principal]$ gcc video.c -o video -Wall -Wextra -O2 -Wwrite-strings -Wstrict-prototypes
    In file included from video.c:1:
    video.h:6: warning: initialization discards qualifiers from pointer target type
    video.h:6: warning: initialization discards qualifiers from pointer target type
    video.h:6: warning: initialization discards qualifiers from pointer target type
    video.h:6: warning: initialization discards qualifiers from pointer target type
    video.h:6: warning: initialization discards qualifiers from pointer target type

  6. #46
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    J'ai "corrigé" le code (uniquement le main) pour qu'il ne plante plus, mais c'est tout.
    Regarde le modifs et à partir de ça prends les mesures pour programmer correctement ce que tu veux faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    int main(int argc,char *argv[]){
     
    	int j=4;
    	char* nom=NULL;
    	char *tmp=NULL;
    	int i;
     
    	for(i=argc-1; i>0; i--)
    	{
    		printf("i= %d argv[%d]= %s\n", i, i, argv[i]);
    		printf("Valeur de j %d\n", j);
    		if (j < 0)
    		{
    				printf("Valeur de j incorrecte %d\n", j);
    		}
    		else
    		if(j==4)
    		{
    			printf("Parametre lu: %s\n", argv[i]);
     
    			if(strncmp(argv[i],"/dev/",5)==0)
    			{
    				test_parametres(&parametres[j],argv[i]);
    				printf("parametre defini n°%d: %s\n", j, parametres[j]);
    				j--;
    				printf("j: %d\n",j);
    			}
    			else
    			{
    			}			
    		}
    		else if(j==3)
    		{
    			printf("ici\n");
    			if(strncmp(argv[i],"/mnt/",5)==0){
     
    				tmp = realloc(nom, 1 + strlen(argv[i]));
     
    				if(tmp!=NULL)
    				{
    						nom = tmp;
     
    						strcpy(nom,argv[i]);
    						test_parametres(&parametres[j],nom);
    						printf("parametre defini numero %d: %s\n", j, parametres[j]);
    						j--;
    						printf("j: %d\n",j);
     
    				}
    				else
    				{
    					free(nom);
    					SortiePrematuree();
    				}
    			}
    			else
    			{
    				tmp = realloc(nom, 1 + strlen (argv[i]));
     
    				if(tmp!=NULL)
    				{
    						nom = tmp;
     
    						strcpy(nom,argv[i]);
    						printf("Construction nom: %s\n", nom);
     
    /*
    					strcpy(tmp,nom);
    					*nom=realloc(nom, (strlen(argv[i])+strlen(tmp)+2));
     
    					if(nom!=NULL){
     
    						strcpy(nom,argv[i]);
    						sprintf(nom,"%s%s",tmp);
    						printf("Construction nom: %s\n", nom);
    					}
    */
    				}
    				else
    				{
    					free(nom);
    					SortiePrematuree();
    				}
    			}
    		}
    		else
    		{
    			puts("dans le else");
    			if (nom != NULL)
    			{
    				free(nom); nom = NULL;
    			}
    			test_parametres(&parametres[j],argv[i]);
    			printf("parametre defini numero %d: %s\n", j, parametres[j]);
    			j--;
    			printf("j: %d\n",j);
    		}		
    	}
     
    	return 0;
    }
    Le code de la fonction SortiePrematuree

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void SortiePrematuree(void)
    {
    	fprintf(stderr, "Pb alloc Memoire\n");
    	exit(EXIT_FAILURE);
    }
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #47
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Points : 64
    Points
    64
    Par défaut
    Merci, j'en demandais pas tant, simplement pour comprendre pourquoi il plante, et le corriger de moi-même...

    De mon côté j'avais trouvé le point de blocage en faisant ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    printf("là2\n");
    tmp = realloc(nom, strlen(nom));
    printf("là3\n");
    et la console donnant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [florian@192 Prog_principal]$ ./mainCommande invoquée: ./video 00:01:00 320 240 /mnt/My U3 Drive/240307_1335 /dev/video0 &
    i: 7
    Parametre lu: /dev/video0
    parametre defini n°4: /dev/video0
    j: 3
    i: 6
    ici
    là2
    [florian@192 Prog_principal]$
    Donc effectivement ca bloque lors du realloc... Mais y a t-il un moyen de savoir ce qui s'y passe vraiment?

    Je vais regarder le code de Trap D, merci.

  8. #48
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Emmanulel et moi t'avons déjà expliqué les erreurs de ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    				*tmp = realloc(nom, sizeof(char*));
     
    				if(tmp!=NULL){
    					strcpy(tmp,nom);
    					*nom=realloc(nom, (strlen(argv[i])+strlen(tmp)+2));
     
    					if(nom!=NULL){
     
    						strcpy(nom,argv[i]);
    						sprintf(nom,"%s%s",tmp);
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  9. #49
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Points : 64
    Points
    64
    Par défaut
    J'ai posté le code avec ces erreurs déjà corrigées!!
    C'est pour cela que je demande pourquoi cela cloche!!

    JE vais tester le morceau de code donné, mais il n'empeche que j'aimerais comprendre ce qui cloche encore dans le code posté en #45 qui ETAIT CORRIGE!

  10. #50
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Flophx
    JE vais tester le morceau de code donné, mais il n'empeche que j'aimerais comprendre ce qui cloche encore dans le code posté en #45 qui ETAIT CORRIGE!
    Ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    Compiling: main.c
    main.c: In function `test_parametres':
    main.c:10: error: `NULL' undeclared (first use in this function)
    main.c:10: error: (Each undeclared identifier is reported only once
    main.c:10: error: for each function it appears in.)
    main.c:11: warning: implicit declaration of function `printf'
    main.c: At top level:
    main.c:20: error: `NB_PARAM' undeclared here (not in a function)
    main.c: In function `commande_acquisition':
    main.c:22: error: `NULL' undeclared (first use in this function)
    main.c:24: warning: implicit declaration of function `malloc'
    main.c:28: warning: implicit declaration of function `sprintf'
    main.c: In function `main':
    main.c:47: error: `NULL' undeclared (first use in this function)
    main.c:57: warning: implicit declaration of function `strncmp'
    main.c:59: error: `parametres' undeclared (first use in this function)
    main.c:72: warning: implicit declaration of function `fflush'
    main.c:72: error: `stdout' undeclared (first use in this function)
    main.c:75: warning: implicit declaration of function `realloc'
    main.c:75: warning: implicit declaration of function `strlen'
    main.c:75: warning: assignment makes pointer from integer without a cast
    main.c:79: warning: assignment makes pointer from integer without a cast
    main.c:83: warning: implicit declaration of function `strcpy'
    main.c:85: warning: implicit declaration of function `free'
    main.c:97: warning: assignment makes pointer from integer without a cast
    main.c:101: warning: assignment makes pointer from integer without a cast
    main.c: At top level:
    main.c:20: warning: unused parameter 'param'
    Process terminated with status 1 (0 minutes, 2 seconds)
    8 errors, 14 warnings
    Il faut poster du code compilable, sinon, ça énerve... D'autre part, pourquoi tu fais 2 realloc() à la suite ? Ca n'a aucun sens. Un seul suffit, on l'a montré...
    Pas de Wi-Fi à la maison : CPL

  11. #51
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Points : 64
    Points
    64
    Par défaut
    Bon, moi quand je compile mon code, j'ai pas autant d'erreur, juste ce que j'ai donné précédemment... J'ai compris pour l'unique realloc, j'ai donc appliqué les corrections données par Trap D.

    ce qui me donne, à l'issu de l'exécution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    i= 7 argv[7]= /dev/video0
    Valeur de j 4
    Parametre lu: /dev/video0
    parametre defini n°4: /dev/video0
    j: 3
    i= 6 argv[6]= Drive/240307_1528
    Valeur de j 3
    ici
    Construction nom: Drive/240307_1528
    i= 5 argv[5]= U3
    Valeur de j 3
    ici
    Construction nom: U3
    i= 4 argv[4]= /mnt/My
    Valeur de j 3
    ici
    parametre defini n°3: /mnt/My
    j: 2
    i= 3 argv[3]= 240
    Valeur de j 2
    dans le else
    parametre defini n°2: 240
    j: 1
    i= 2 argv[2]= 320
    Valeur de j 1
    dans le else
    parametre defini n°1: 320
    j: 0
    i= 1 argv[1]= 00:01:00
    Valeur de j 0
    dans le else
    parametre defini n°0: 00:01:00
    j: -1
    La boucle s'effectue donc bien (ouf..), mais il me manque simplement la concaténation de tous les éléments à partir du moment où j=3.

    En revanche, j'utilise ca pour compiler:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc video.c -o video -Wall -Wextra -O2 -Wwrite-strings -Wstrict-prototypes
    Mais j'ai pas autant de lignes de warning....

  12. #52
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Citation Envoyé par Flophx
    Merci, j'en demandais pas tant, simplement pour comprendre pourquoi il plante, et le corriger de moi-même...

    De mon côté j'avais trouvé le point de blocage en faisant ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    printf("là2\n");
    tmp = realloc(nom, strlen(nom));
    printf("là3\n");
    Donc effectivement ca bloque lors du realloc... Mais y a t-il un moyen de savoir ce qui s'y passe vraiment?
    A mon avis, ca plante plutot sur strlen(nom), parce que nom vaut NULL.

  13. #53
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Flophx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc video.c -o video -Wall -Wextra -O2 -Wwrite-strings -Wstrict-prototypes
    Mais j'ai pas autant de lignes de warning....
    Normal. Les options, il faut le mettre au début...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -Wall -Wextra -O2 -Wwrite-strings -Wstrict-prototypes video.c -o video
    Mais tu devrais apprendre à utiliser make...

    http://emmanuel-delahaye.developpez.com/make.htm
    Pas de Wi-Fi à la maison : CPL

  14. #54
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Normal. Les options, il faut le mettre au début...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -Wall -Wextra -O2 -Wwrite-strings -Wstrict-prototypes video.c -o video
    Premiere fois que j'entends ca !
    Je viens de faire le test et ca confirme ce que je pensais, l'ordre n'a visiblement pas d'importance

  15. #55
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Points : 64
    Points
    64
    Par défaut
    Je vais étudier make, si ca peut me simplifier la vie, je vais en profiter...

    Sinon, je n'arrive pas à concaténer les différents éléments.. Dans mon cheminement de pensée:
    tmp>=nom
    nom<=argv
    concaténation(nom, tmp)

    lorsqu'on fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nom = tmp;
    strcpy(nom,argv[i]);
    strcpy est bien sensé recopier la chaîne 2 dans la chaine 1. Seulement si l'espace n'est pas suffisant, je suppose que la chaine 2 "écrase" la première. Puisque je n'ai pas de concaténation, c'est ce qui se passe je suppose, donc je n'alloue pas assez de mémoire à tmp lors de realloc()?

  16. #56
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gl
    Premiere fois que j'entends ca !
    Je viens de faire le test et ca confirme ce que je pensais, l'ordre n'a visiblement pas d'importance
    Il faut que les options soient avant le -o, non ?
    Pas de Wi-Fi à la maison : CPL

  17. #57
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Points : 64
    Points
    64
    Par défaut
    J'ai utilisé celui qui a été envoyé par TRAP D, et c'est avec celui là que je n'arrve pas à concaténer!!

    Je n'avais pas vu le tien Emmanuel, vu qu'il a apparemment été rajouté ensuite!!

  18. #58
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Points : 64
    Points
    64
    Par défaut
    Bien, au risque de passer pour un rabat-joie.... Ton exemple se bloque un peu au ^même moment que le mien, à j=3!!

    ET d'après ce que je vois, c'est à cause du strcat...

  19. #59
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 252
    Points : 64
    Points
    64
    Par défaut
    J'obtiens ceci moi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [florian@192 Prog_principal]$ ./video 00:01:00 320 240 /mnt/My U3 drive /dev/video0
    i: 7
    Parametre lu: /dev/video0
    parametre defini #4: /dev/video0
    j: 3
    i: 6
    Erreur de segmentation

  20. #60
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par gl
    Premiere fois que j'entends ca !
    Je viens de faire le test et ca confirme ce que je pensais, l'ordre n'a visiblement pas d'importance
    Il faut que les options soient avant le -o, non ?
    Apparement non. Pas d'apres les quelques tests que je viens de faire.
    Je vais jeter un coup d'oeil a la doc de gcc pour confirmer ou infirmer ce point. Mais ca me surprendrais beaucoup qu'il y ait cette limitation, c'est precisement un des avantages des options dans un format particulier comme -xxxx (ou /xxx) de ne pas avoir a compter sur l'ordre des parametres.

Discussions similaires

  1. Boucle for qui ne boucle pas !
    Par polothentik dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 18/04/2008, 10h50
  2. Boucle FOR qui arrete le script
    Par yves_fuji dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 16/04/2008, 14h06
  3. Boucle for qui fait un tour en trop
    Par Iloon dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/03/2008, 11h15
  4. probleme boucle for et onrelease bloqué
    Par ritepac dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 12/02/2008, 09h48
  5. boucle for qui ne marche pas
    Par Invité dans le forum Langage
    Réponses: 16
    Dernier message: 12/06/2006, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo