Bonjour,
Comme le titre l'indique, le problème ici est par rapport aux tableaux de tableaux...
Je travaille actuellement sur un petit projet et je tombe sur ceci:
Je veux créer une matrice de strings: ma première intuition était alors de créer ceci directement en écrivant:
Les valeurs de la matrice sont ensuite définies grâce à un fscanf réalisé plutard dans le code à partir d'un fichier donné...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 int nb_V;// sera lu dans un fichier donné . . . char Vet_and_accused[nb_V][nb_V][MAX_NAME_SIZE]; //MAX_NAME_SIZE est fixé par une macro, et reprèsente la taille maximale des mots dans la matrice for(k=0;k<nb_V;k++){ for(l=0;l<nb_V;l++){ Vet_and_accused[k][l][0]='\0';//LIGNE A } }
Le problème c'est que, quand nb_V (qui est la taille de la matrice carrée en question) est petit, de l'ordre de 10 le programme marche bien...
MAIS quand les données et donc la taille de la matrice deviennent de l'ordre de 1 000 000, je tombe sur un segmentation fault à la compilation...
J'ai donc utilisé le ddd pour executer pas à pas le programme afin de savoir où ça coince et je vois qu'en fait le programme ne veut pas executer la LIGNE A comme il le faisait pour un nb_V petit.
J'ai ensuite essayé de faire les choses autrement, et d'essayer l'allocation dynamique dans ma définition de la matrice, arrêtez moi si je dis n'importe quoi mais je l'ai fait comme suit:
Là, Rien ne marche plus, que nb_V soit grand ou petit, je reçois un Segmentation Fault.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 char* **Vet_and_accused =(char***)malloc(nb_V*MAX_NAME_SIZE*sizeof(char)); for(i=0;i<nb_V;i++){ Vet_and_accused[i] = (char**)malloc(nb_V*MAX_NAME_SIZE*sizeof(char)); //Création des sous tableaux... for(l=0;l<nb_V;l++){ Vet_and_accused[i][l]="";// Initialisation de chaque case de la matrice } }
Quand, j'ai executé le programme pas à pas avec ddd, je vois que maintenant, l'étape d'initialisation ne pose plus problème, mais il y a un problème avec le fscanf: comme j'ai dit précedemment, les cases de la matrices sont définies par un fscanf dans un fichier donné.
Je soupçonne ma définition avec le malloc de la matrice...
Mon fscanf est à priori bien définit vu qu'il a marché dans le premier cas. D'ailleurs voilà à quoi il ressemble:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 fscanf(f,"%s %d",Vet_and_accused[i][0], &nb_Accused);
Voilà, Merci déjà d'avoir pris le temps de me lire
et merci d'avance pour votre réponse
![]()
Partager