Bonjour,

Mon problème est des plus basiques, mais pour une raison que je ne saisie pas, peut-être due à l'heure "tardive", je n'arrive pas à le résoudre.

J'ai une liste chaînée, que je veux convertir en tableau, ou plus exactement deux tableau ; un étant en **char (crée puis donné en return), et l'autre en *int (passé par adresse).

La fonction:
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
char **lst_to_arr(t_ls_list *root, int **mt, int *len)
{
	t_ls_list *crawler;
	char **ret;
	int i;
 
	*len = 0;
	if (!root)
		return (0);
	crawler = root;
	*len = lst_size(root);
	if (!(ret = malloc(sizeof(char*) * *len)) || !(*mt = malloc(sizeof(int) * *len)))
		return (0);
	printf("len of %d\n", *len);
	i = 0;
	while (i < *len)
	{
		ret[i] = strdup(crawler->name);
		printf("%d at %d\n", crawler->mtime, i);
		*mt[i] = 12; //crawler->mtime
		printf("check\n");
		crawler = crawler->next;
		++i;
	}
	return (ret);
}
Son appel:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
	tls->targetsc = lst_to_arr(tls->targets, &tls->targetsmt, &tls->targetslen);
	tls->dirsc = lst_to_arr(tls->dirs, &tls->dirsmt, &tls->dirslen);
(tls->targetsmt & tls->dirsmt n'étant pas malloc)

Ma struct:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
typedef struct s_ls_list
{
	char *name;
	int mtime;
	struct s_ls_list *next;
} t_ls_list;
J'ai essayé d'ouvrir gdb pour mieux comprendre ce qu'il se passait, mais j'ai plus été perturbé qu'autre chose:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
(gdb) print *mt[0]
$1 = 0
(gdb) print *mt[1]
Cannot access memory at address 0x0
(gdb) print *mt[2]
Cannot access memory at address 0x16
(gdb) print *(*mt+0)
$2 = 0
(gdb) print *(*mt+1)
$3 = 0
(gdb) print *(*mt+2)
$4 = 0
Mon programme segfault effectivement au deuxième appel (*mt[1] => cannot acces memory ...), cependant, j'ai essayé *mt[1] et *(*mt+1), et ce dernier fonctionne! les deux expression ne sont-elles pas censées revenir au même?

Je suppose donc que j'ai dû rater mon malloc, n'ayant pas trop l'habitude avec les *int, et encore moins non malloc'd et passées par adresse, mais tout de même, je n'arrive pas à localiser mon erreur.

Merci d'avance pour votre temps & vos réponses éventuelles.
Bonne soirée.