Voila j'ai un soucis sur la ligne du malloc. En effet, j'ai deux fonctions qui supprime un element d'un tableau.Lorsque je lance ces deux fonctions cela me fait une erreur (le pc rame et ne repond plus..). Ce problème se trouve lors de l'appel à la second fonction.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
void algorithmeTournee(s_livraison** tabLivraisonTotale, s_livraison** tabLivraisonParPlateforme, s_plateforme* tabPlateforme,int *nbLivraisonTotale, int *nbLivraisonParPlateforme, int nbPlateforme, int numPlat){
 
suppElement(tabLivraisonTotale,(*tabLivraisonParPlateforme+numeroLivraison)->nBon, nbLivraisonTotale);
retirerElement(tabLivraisonParPlateforme, numeroLivraison, nbLivraisonParPlateforme);
et voici le code des deux fonctions...
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
 
void retirerElement(s_livraison **tab, int indice, int *nbLivraison){
 
int i;
int j=0;
s_livraison *temp=NULL;
printf("debut indice = %d et nbLivraison = %d\n",indice,*nbLivraison);
system("pause");
 
temp = (s_livraison*)malloc ((*nbLivraison-1) * sizeof(s_livraison));
if(temp==NULL) printf("ERREUR \n"); else printf("OK \n");
 
for(i=0,j=0; i<(*nbLivraison) && j<(*nbLivraison); i++,j++){
 
     //element different de celui à supprimer
     if (i != indice){
       //recopie de lelement a garder  
       *(temp+i)=*(*tab+j);
     }else{
           j=j+1;           
           if(j<(*nbLivraison))*(temp+i)=*(*tab+j);
    } 
 }
 
//Free du tableau
free(*tab);
 
*tab=temp;  
 
// Taille = taille -1
*nbLivraison = *nbLivraison - 1;
 
}
 
void suppElement(s_livraison **tab, int nBonAsupp, int *nbLivraison){
 
int i;
int j=0;
s_livraison *temp;
 
temp = (s_livraison*)malloc ((*nbLivraison-1) * sizeof(s_livraison));
if(temp==NULL) printf("ERREUR \n"); else printf("OK \n");
 
for(i=0,j=0; i<(*nbLivraison) || j<(*nbLivraison); i++,j++){    
     //element different de celui à supprimer
     if((*tab+i)->nBon != nBonAsupp){
       //recopie de lelement a garder  
       *(temp+i)=*(*tab+j);
     }else{
       j=j+1;
       if(j<(*nbLivraison))*(temp+i)=*(*tab+j);
    }
 }
 
//Free du tableau
free(*tab);
 
*tab=temp;  
 
// Taille = taille -1
*nbLivraison = *nbLivraison - 1;
}
Merci.