Bonjour,

J'essaye de faire un programme me permettant de générer une quantité variable de code de 9 caractères.

Mon problème vient du fait que je peux sans problème générer 800000 codes mais pas 1000000. (J'ai une erreur Segmentation Fault). Je suppose que le problème vient d'une allocation mémoire mais je vois pas vraiment comment corriger ca.

PS : j'ai aussi un warning pendant la compilation de ce code qui est :
genCode.c: In function ‘genCode’:
genCode.c:53: attention : control reaches end of non-void function.
Pourtant la fonction est bien de type void ?

Par ailleurs, toutes suggestions pour faire mieux est la bienvenue

Voici le code complet :
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
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <time.h>
 
#define NUM_THREADS 8
 
// Initialisation des constantes
const char cPattern[63] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 
// Initialisation de la structure des arguments de threads
struct threadsArgs {
	char *cOp;
	unsigned int iQte;
};
 
struct threadsArgs genCode_args_array[NUM_THREADS];
 
void *genCode(void *threadarg)
{
	// Declaration de la structure
	struct threadsArgs *args;
	args = (struct threadsArgs *) threadarg;
 
	// Initialisation des variables
	int i = 0;
	int iRang = 2;
	int iIndex = 0;
	char tmpCode[10] = "";
	char cCode[args->iQte][10];
    char empty[1] = "";
 
	// On boucle sur la quantite de code desire
	for(i=0; i<args->iQte; i++)
	{
	    // On initialise la position dans la chaine
	    iRang = 2;
 
	    // On concatene le code produit en debut de chaine
	    strcat(tmpCode, args->cOp);
 
	    // On boucle du rang 2 jusqu'au rang 8
	    while( iRang < 9 )
	    {
	        // On genere un nombre aleatoire
	        iIndex = rand() % 62;
 
	        // On recupere le caractere a la position iIndex dans la chaine cPattern
	        tmpCode[iRang] = cPattern [iIndex];
 
	        // On incremente le rang
	        iRang++;
	    }
 
	    // On copie tmpCode dans le tableau cCode
	    strcpy(cCode[i], tmpCode);
 
	    // On reinitialise tmpCode
	    strncpy(tmpCode, empty, 1);
	}
 
	// On affiche tout les codes generes
	for(i=0; i<args->iQte; i++)
	{
	    printf("Code %d : %s\n", i, cCode[i]);
	}
}
 
int main(void)
{
	pthread_t th1;
	void *ret;
	// Initialisation du random
    	srand( time(NULL) );
	genCode_args_array[1].cOp = "0B";
	genCode_args_array[1].iQte = 1000000;
 
	if (pthread_create (&th1, NULL, genCode, &genCode_args_array[1]) < 0)
	{
		fprintf(stderr, "Impossible de creer le thread\n");
		exit(1);
	}
 
	(void)pthread_join (th1, &ret);
	exit(0);
}