Bonjour à tous !

Je me suis fraichement remis au langage C, et je suis allé faire un challenge sur codewars, qui consiste à décoder du morse donné en input à une fonction. Mais comme vous, vous doutez, je rencontre un problème .

Le code en question:

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
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
const char *morse[55] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", ".-.-.-", "--..--", "..--..", ".----.", "-.-.--", "-..-.", "-.--.", "-.--.-", ".-...", "---...", "-.-.-.", "-...-", ".-.-.", "-....-", "..--.-", ".-..-.", "...-..-", ".--.-.", "...---..."};  
const char *ascii[55] = {"A",  "B",    "C",    "D",   "E", "F",    "G",   "H",    "I",  "J",    "K",   "L",    "M",  "N",  "O",   "P",    "Q",    "R",   "S",   "T", "U",   "V",    "W",   "X",    "Y",    "Z",    "0",     "1",     "2",     "3",     "4",     "5",     "6",     "7",     "8",     "9",     ".",      ",",      "?",      "'",      "!",      "/",     "(",     ")",      "&",     ":",      ";",      "=",     "+",     "-",      "_",      "\"",     "$",       "@",      "SOS"};
 
void decode_morse(char *morse);
void error_(const char *message);
int count_array(char *tocount);
 
int main(int argc, char *argv[])
{
	decode_morse(".... . -.--   .--- ..- -.. .");
	return 1;
}
 
void decode_morse(char *morse_)
{
	int i, y = 0 ; 
	char *decoded = strdup(morse_);
 
	if(decoded)
	{	
		int count = count_array(decoded);
		char *token = strtok(decoded, " ");
		char *array[count];
		char ret[count];
 
		while(token != NULL)
		{
			array[i] = token;
			i++;
			token = strtok(NULL, " ");	
		}
 
		for(i = 0; i < count; i++)
		{	
			for(y = 0; i < 55; y++)
			{
				if(array[i] == morse[y])
				{
					ret[i] = *ascii[y];
				}
			}
		}
	}	
 
 
	else
		error_("Strdup failed");
}
 
void error_(const char *message)
{
	fprintf(stderr, "%s\r\n", message);
}
 
int count_array(char *tocount)
{
	char *copy = strdup(tocount);
	int i = 0;
	if(copy)
	{
		char *token = strtok(copy," ");
		while(token != NULL)
		{
			i++;
			token = strtok(NULL, " ");
		}
		free(copy);
		return i;
	}
	else
		error_("Function failed");
}
ça me renvoit un segfault !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
epicout@epic:~/code$ gcc -o code coding.c && ./code
Segmentation fault
Du coup ni une, ni deux, je fais une compilation avec les infos de débug, et je lance gdb, qui me renvoit à ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Program received signal SIGSEGV, Segmentation fault.
0x000055555555537d in decode_morse (morse_=0x55555555570c ".... . -.--   .--- ..- -.. .") at coding.c:32
32                              array[i] = token;
étant donné que token est censé renvoyer un pointeur de char, je ne saisis pas où est mon erreur !

Si vous avez l'aimabilité de me dire ce qui ne va pas dans mon code, et je pense pas qu'il n'y ait qu'une seule chose qui ne va pas, je vous en serais reconnaissant, merci !