Passe un tableau de structure a une fonction en C

bonjour

j’ai une erreur de segmentation en fin de programme et mon tableau c’est pas ça ?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>


	struct TRUC
	{
		int truca; 
		int trucb; 
	};

int main(int argc,char **argv)
{
	int NElement = 100, taille_S_TRUC, Nouv_dim, i;

	struct TRUC *T_S_test = NULL;
	struct TRUC V_S_test;

	taille_S_TRUC = sizeof(struct TRUC); // connaitre la taille de la structure GPX
	Nouv_dim = (NElement + 1) * taille_S_GPX;
	test = (struct TRUC *) malloc(Nouv_dim); // allocation mémoire  

	V_S_test.truca = 2;
	V_S_test.trucb = 0;
	T_S_test[0] = V_S_test;
	V_S_test.truca = 8;
	V_S_test.trucb = 23;
	T_S_test[1] = V_S_test;

i =0;
		printf("i - truca:%03d - trucb:%03d\n",T_S_test[i].truca ,T_S_test[i].trucb);
 i =1;
		printf("i - truca:%03d - trucb:%03d\n",T_S_test[i].truca ,T_S_test[i].trucb);
 i =99;
		printf("i - truca:%03d - trucb:%03d\n",T_S_test[i].truca ,T_S_test[i].trucb);

Ma_fonction(&test);
i =0;
		printf("i - truca:%03d - trucb:%03d\n",T_S_test[i].truca ,T_S_test[i].trucb);
 i =1;
		printf("i - truca:%03d - trucb:%03d\n",T_S_test[i].truca ,T_S_test[i].trucb);
 i =99;
		printf("i - truca:%03d - trucb:%03d\n",T_S_test[i].truca ,T_S_test[i].trucb);

printf("FIN\n");

}



Ma_fontion(struct TRUC **test)
{
 // parse un fichier texte, modifie les données du tableau jusqu'a l'indice 50
	les infos de mon fichier
	40 - 17
	18 - 587
	547 - 1200
	etc ...
}

[code]resultat :
avant la Ma_fonction
0 - truca:2 - trucb:0
1 - truca:8 - trucb:23
99 - truca:0 - trucb:0

après Ma_fonction
0 - truca:40 - trucb:17
element bien modifie et conforme au donnée du fichier texte, mais ce sont les données qui se trouver normalement à l’indice 50 et 0.
1 - truca:-17584254 - trucb:-17584254 ici :017 ???
99 - truca:0 - trucb:0 est la normal rien de changer
FIN
Erreur de segmentation[/code]

une idée, parce que moi :open_mouth: ???

merci d’avnace.

J’ai pas vraiment la tête à me plonger dans ton code, mais tu peut le compiler avec l’option -g et le lancer avec gdb, ça te permettra de voir où exactement tu plante. Sinon lance-le avec valgrind qui pourras te dire pleins de choses sur la mémoire.

a la fin de gdb:

Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()

pour la 1 ligne c’est erreur de segmentation de mon premier post enfin je crois
et pour la 2 ligne :119 , ça serait ecrit en chinois ça serai pareil ???

pour sure, mais la encore, pour le debutant que je suis, c’est du chinois!!! :119 :013 :12

[quote=“lrgtk”]a la fin de gdb:

Program received signal SIGSEGV, Segmentation fault. 0x00000000 in ?? () [/quote]
Tu as fait comment ?

gdb ./nom-du-programme

Puis tu as tapé r pour lancer le programme avec les éventuels paramètre ?

Après qu’il plante tape l (ou list) pour voir où dans ton code tu es arrivé.

Tu dois pouvoir facilement trouver des howto sur gdb assez simples.

[quote=“lrgtk”]pour la 1 ligne c’est erreur de segmentation de mon premier post enfin je crois
et pour la 2 ligne :119 , ça serait ecrit en chinois ça serai pareil ???[/quote]
Je ne peux pas t’aider je ne connais pas assez valgrind pour te le décrire de tête.

De mal en pis

un simple programme

int i = 0;
while(i<10)
{
 printf("compteur:%d\n",i);
i++;
}

ne fonctionne pas

c’est quoi ce bordel???

fonctionne pas ça veut dire quoi ?

je devrai avoir

compteur:0
compteur:1
compteur:2
etc...

j’ai rien !!!

apres prompt>./monprog

la boucle fonction un pca mais pas sur pcB ?
j’ai commencer a developper sur le pcB c’est la premier fois que j’ai ce pb
je viens de reinstaller debian toujours, le pb est encore la

des programme comme terminal, openoffice, gedit, moniteur systeme = fonctionne correctement de ce que je peut en juger

un code avec une simple boucle ne fonctionne pas ???
le prompt reste vide
obliger de faire un ctrl c pour le recuperer!!!

salut
donne voir le code complet. parce que juste ta boucle sa peux pas tourner :slightly_smiling: