malloc renvoie sigsev de temps en temps
Bonjour,
Je fais actuellement un programme en C pour lequel je dois toucher à des listes chaînées. J'appelle donc beaucoup de fois la fonction List_Insert. Mon problème est que mes malloc me renvoient de temps en temps sigsev. C'est très surprenant sachant que j'ai le même problème en faisant malloc(10000) et que ma mémoire est très loin d'être saturée. Ça fait plusieurs heures que je ne vois pas mon erreur, si quelqu'un pouvait m'aider... ;) Définitivement le C est mon langage préféré...
J'utilise le code suivant :
Code:
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 78 79 80 81 82 83 84 85 86 87 88 89
| MusicFile List_CopyNode(const MusicFile src)
{
MusicFile *dest;
dest = malloc(sizeof(MusicFile)); // Ce malloc pose parfois problème
dest->Lenght = src.Lenght;
dest->Score = src.Score;
dest->Title = malloc(sizeof(char*));
strcpy(dest->Title,src.Title);
return *dest;
}
void List_Append(list *l, MusicFile data)
{
node* NewNode;
NewNode = malloc(sizeof(node)); // Ce malloc passe parfois problème.
list InitialPos;
InitialPos = (*l);
NewNode->data = List_CopyNode(data);
while((*l)->next != NULL)
(*l)=(*l)->next;
(*l)->next =NewNode;
(*l)=NewNode;
(*l)->next=NULL;
(*l) = InitialPos;
}
void List_Add(list *l, MusicFile data)
{
node *temp;
temp=(node *) malloc(sizeof(node));
temp->data = List_CopyNode(data);
if (*l == NULL)
{
(*l)=temp;
(*l)->next=NULL;
}
else
{
temp->next=(*l);
(*l)=temp;
}
}
void List_Addafter(list *l,MusicFile data, int position)
{
int i;
list temp,left,right;
right=(*l);
for(i=1;i<position;i++)
{
left = right;
right = right->next;
}
temp=(node *)malloc(sizeof(node));
temp->data = List_CopyNode(data);
left->next=temp;
left=temp;
left->next=right;
}
void List_Insert(list *l, MusicFile data) // Erreur si la lite est vide
{
int c=0;
list temp;
temp = *l;
if(temp==NULL)
List_Add(l,data);
else
{
while(temp!=NULL)
{
if(strcmp(temp->data.Title,data.Title)<0)
c++;
temp=temp->next;
}
if(c==0)
List_Add(l,data);
else if(c<List_GetSize(*l))
List_Addafter(l,data,++c);
else
List_Append(l,data);
}
}
size_t List_GetSize(list l)
{
int c=0;
while(l!=NULL)
{
l=l->next;
c++;
}
return c;
} |
Merci de votre aide. ;)