bonjour, j'ai réalisé une fonction de fusion de deux tableaux. Lorsque je retourne le tableau résultat de la fonction ça fonctionne mais lorsque je veux passer le tableau résultat par référence il y a une erreur pendant la compilation. Pouvez vous m'aider?
voici le code ou je retourne le tableau
main
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 #include <stdio.h> #include "fonctions.h" int main(int argc, const char * argv[]) { int tTab1[5] = {1,3,5,7,8}; int tTab2[4] = {2,3,4,9}; int *pTab = NULL; int dTaille1 = 5; int dTaille2 = 4; int dI; pTab = tabFusion(tTab1, tTab2, dTaille1, dTaille2); for (dI = 0; dI < dTaille1+dTaille2; dI++) { printf("%d", pTab[dI]); } return 0; }
Voici le code ou je passe par référence le tableau et ou j'ai une erreur
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 #include "fonctions.h" #include "stdlib.h" int * tabFusion (int tTab1[], int tTab2[], int dTaille1, int dTaille2) { int dPosTab1 = 0; int dPosTab2 = 0; int dPosTab3 = 0; int *pTab; pTab = malloc(10 * sizeof(int)); if (pTab == NULL) { puts("erreur allocation"); exit(EXIT_FAILURE); } while ((dPosTab1 < dTaille1) && (dPosTab2 < dTaille2)) { if (tTab1[dPosTab1] < tTab2[dPosTab2]) { pTab[dPosTab3] = tTab1[dPosTab1]; dPosTab3++; dPosTab1++; } else { pTab[dPosTab3] = tTab2[dPosTab2]; dPosTab3++; dPosTab2++; } } // Si un tab n'est pas terminé while (dPosTab1 < dTaille1) { pTab[dPosTab3] = tTab1[dPosTab1]; dPosTab1++; dPosTab3++; } while (dPosTab2 < dTaille2) { pTab[dPosTab3] = tTab2[dPosTab2]; dPosTab2++; dPosTab3++; } return pTab; }
main
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 #include <stdio.h> #include "fonctions.h" int main(int argc, const char * argv[]) { int tTab1[5] = {1,3,5,7,8}; int tTab2[4] = {2,3,4,9}; int *pTab = NULL; int dTaille1 = 5; int dTaille2 = 4; int dI; tabFusion(tTab1, tTab2, &pTab, dTaille1, dTaille2); for (dI = 0; dI < dTaille1+dTaille2; dI++) { printf("%d ", pTab[dI]); } return 0; }
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 #include "fonctions.h" #include "stdlib.h" void tabFusion (int tTab1[], int tTab2[], int **pTab, int dTaille1, int dTaille2) { int dPosTab1 = 0; int dPosTab2 = 0; int dPosTab3 = 0; *pTab = malloc(10 * sizeof(int)); if (*pTab == NULL) { puts("erreur allocation"); exit(EXIT_FAILURE); } while ((dPosTab1 < dTaille1) && (dPosTab2 < dTaille2)) { if (tTab1[dPosTab1] < tTab2[dPosTab2]) { *pTab[dPosTab3] = tTab1[dPosTab1]; dPosTab3++; dPosTab1++; } else { *pTab[dPosTab3] = tTab2[dPosTab2]; dPosTab3++; dPosTab2++; } } // Si un tab n'est pas terminé while (dPosTab1 < dTaille1) { *pTab[dPosTab3] = tTab1[dPosTab1]; dPosTab1++; dPosTab3++; } while (dPosTab2 < dTaille2) { *pTab[dPosTab3] = tTab2[dPosTab2]; dPosTab2++; dPosTab3++; } }
j'ai le message d'erreur suivant:
thread1:EXC_BAD_ACCESS(code=1,address=0x1) à la ligne 28 de la fonction.
Partager